我正在尝试将Woocommerce的“ woocommerce-loop-product__title”从H2更改为H6,但是在查找该功能时遇到了一些麻烦。
任何人都可以建议插件文件中的位置,或者更好地如何在主题functions.php文件中覆盖它吗?
谢谢
答案 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>';
}