如何在WooCommerce商品归档页禁用商品标题链接
WooCommerce禁用商品标题超链接修复方案
你的代码失效的核心原因是钩子时机不对:init钩子触发时,WooCommerce还没完成自身动作的注册,此时调用remove_action找不到对应的钩子,自然无法生效。
下面是修复后的完整代码:
class Custom_WooCommerce_Disable_Title_Link { public function __construct() { // 改用woocommerce_init钩子,确保WooCommerce初始化完成后再执行移除操作 add_action( 'woocommerce_init', array( $this, 'remove_title_hyperlink' ) ); } public function remove_title_hyperlink() { // 移除商品列表项前后的链接包裹标签 remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); // 兼容部分自定义主题:如果主题直接在标题模板里加了链接,替换为无链接的标题输出 remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 ); add_action( 'woocommerce_shop_loop_item_title', array( $this, 'custom_loop_product_title' ), 10 ); } // 自定义不带超链接的商品标题 public function custom_loop_product_title() { $title_classes = esc_attr( apply_filters( 'woocommerce_product_loop_title_classes', 'woocommerce-loop-product__title' ) ); echo "<h2 class='{$title_classes}'>" . get_the_title() . '</h2>'; } } new Custom_WooCommerce_Disable_Title_Link();
关键修复点说明
- 钩子替换:把
init换成woocommerce_init,这个钩子是WooCommerce专属初始化钩子,会在所有核心动作注册完成后触发,保证remove_action能精准找到目标钩子。 - 兼容主题自定义:部分主题会修改默认的商品标题输出逻辑,直接在标题里嵌套超链接,这时候就需要替换默认的标题输出函数,用自定义的无链接版本替代。
内容的提问来源于stack exchange,提问作者devrashed
相关产品推荐
相关产品推荐

