You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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();

关键修复点说明

  1. 钩子替换:把init换成woocommerce_init,这个钩子是WooCommerce专属初始化钩子,会在所有核心动作注册完成后触发,保证remove_action能精准找到目标钩子。
  2. 兼容主题自定义:部分主题会修改默认的商品标题输出逻辑,直接在标题里嵌套超链接,这时候就需要替换默认的标题输出函数,用自定义的无链接版本替代。

内容的提问来源于stack exchange,提问作者devrashed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:08:12