将woocommerce-loop-product__title从H2更改为H6

时间:2019-10-31 22:15:11

标签: wordpress woocommerce

我正在尝试将Woocommerce的“ woocommerce-loop-product__title”从H2更改为H6,但是在查找该功能时遇到了一些麻烦。

任何人都可以建议插件文件中的位置,或者更好地如何在主题functions.php文件中覆盖它吗?

谢谢

1 个答案:

答案 0 :(得分:2)

有两种方法可以执行此操作-使用钩子,或通过覆盖Child主题中的WooCommerce模板文件。首先,让我们找到代码。

您要查找的文件位于WooCommerce插件中:

templates/content-product.php

此文件的第5行说:

 This template can be overridden by copying it to yourtheme/woocommerce/content-product.php.

首先让我们看一下文件覆盖。

方法1-文件覆盖

将WooCommerce插件中的templates/content-product.php复制到子主题中的woocommerce/content-product.php。现在,此文件将覆盖插件中的模板。我们对该新文件进行了所需的编辑。

默认content-product.php模板文件中的标题是这样输出的:

echo '<h2 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h2>';

在WooCommerce文件includes/wc-template-functions.php中定义。

如果搜索woocommerce_template_loop_product_title(),将看到定义的函数:

if ( ! function_exists( 'woocommerce_template_loop_product_title' ) ) {

    /**
     * Show the product title in the product loop. By default this is an H2.
     */
    function woocommerce_template_loop_product_title() {
        echo '<h2 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h2>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    }
}

content-product.php文件中的以下代码行:

do_action( 'woocommerce_shop_loop_item_title' );

调用函数woocommerce_template_loop_product_title,这是我们要覆盖的函数。因此,让我们注释掉该行,并用您的代码替换它:

// do_action( 'woocommerce_shop_loop_item_title' );
echo '<h6 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h6>';

简单!

方法2-使用挂钩

另一种选择是从woocommerce_template_loop_product_title钩子中取消删除woocommerce_shop_loop_item_title函数,并用我们自己的函数替换。您可以通过将以下代码添加到functions.php文件中来做到这一点:

remove_action( 'woocommerce_shop_loop_item_title','woocommerce_template_loop_product_title', 10 );
add_action('woocommerce_shop_loop_item_title', 'soChangeProductsTitle', 10 );
function soChangeProductsTitle() {
    echo '<h6 class="' . esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ) . '">' . get_the_title() . '</h6>';
}