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

WooCommerce中将缺货文本替换为联系按钮的问题求助

解决WooCommerce缺货文本替换为「联系我们」按钮的问题

咱们一步步排查你代码失效的原因,再给出可行的修正方案:

问题1:商店页面移除「添加到购物车」按钮失败

你给第一个函数设置的优先级是1,但WooCommerce默认的woocommerce_template_loop_add_to_cart动作优先级是10。这意味着你的函数会在原按钮动作被注册之前就执行remove_action,自然移除不掉目标按钮。而且直接在同一个钩子下输出新按钮的逻辑也不够精准。

问题2:单产品页面的HTML被转义

第二个函数里你直接把<a>标签塞进$availability['availability'],但WooCommerce渲染缺货文本时,会用esc_html()对这个值进行转义——也就是说HTML标签会被当成纯文本显示,根本不会变成可点击的链接。


修正后的完整代码

1. 商店页面替换缺货按钮

用woocommerce_loop_add_to_cart_link过滤器直接拦截按钮输出,根据库存状态替换,比移除动作更可靠:

// 替换商店页面的缺货按钮为「联系我们」
add_filter('woocommerce_loop_add_to_cart_link', 'replace_shop_out_of_stock_button', 10, 2);
function replace_shop_out_of_stock_button($button_html, $product) {
    if (!$product->is_in_stock()) {
        // 替换为自定义联系按钮,可根据需求调整class样式
        $button_html = '<a href="/contact" class="button product_type_simple add_to_cart_button">联系我们</a>';
    }
    return $button_html;
}

2. 单产品页面替换缺货按钮

通过调整动作优先级,先移除原「添加到购物车」按钮,再输出自定义按钮:

// 替换单产品页面的缺货按钮为「联系我们」
add_action('woocommerce_single_product_summary', 'replace_single_product_out_of_stock_button', 9);
function replace_single_product_out_of_stock_button() {
    global $product;
    if (!$product->is_in_stock()) {
        // 移除原添加购物车按钮(原动作优先级为30)
        remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
        // 输出自定义联系按钮,匹配原按钮样式
        echo '<a href="/contact" class="single_add_to_cart_button button alt">联系我们</a>';
    }
}

额外说明

如果你坚持想用woocommerce_get_availability修改缺货文本并保留HTML,可以添加以下代码跳过转义(但这种方法更适合修改文本,而非替换为按钮):

// 允许缺货文本中包含HTML(可选方案)
add_filter('woocommerce_stock_html', 'allow_html_in_stock_notice', 10, 2);
function allow_html_in_stock_notice($stock_html, $availability) {
    return '<p class="stock ' . esc_attr($availability['class']) . '">' . $availability['availability'] . '</p>';
}

内容的提问来源于stack exchange,提问作者Adrian P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:12:28