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

使用woocommerce_get_availability钩子实现产品缺货提示时出现错误的修复咨询

修复WooCommerce缺货提示的错误问题

嘿,我来帮你搞定这个错误!那个Notice提示的核心问题有两个:一是你直接访问了产品的stock属性,这不符合WooCommerce现在的开发规范;二是你用错了woocommerce_get_availability钩子的用法——这个钩子是用来修改可用性数据的,不是直接输出HTML内容的。

下面给你两种修复方案,按需选择:

方案一:替换默认缺货文本(适合修改系统自带的提示)

如果你只是想替换WooCommerce原本的缺货提示文字,按照钩子的正确用法来写代码就行:

function custom_stock_availability($availability, $product) {
    // 先判断产品是否开启库存管理,且库存数量≤0
    if ($product->managing_stock() && $product->get_stock_quantity() <= 0) {
        $availability['availability'] = __('** Sorry currently out of stock **', 'text-domain');
    }
    // 必须返回修改后的可用性数组,这是钩子的要求
    return $availability;
}
add_filter('woocommerce_get_availability', 'custom_stock_availability', 10, 2);

方案二:在产品页添加自定义缺货提示(更灵活控制位置)

如果想在产品详情页的特定位置(比如加购按钮上方)显示自定义提示,建议用woocommerce_single_product_summary钩子,这样位置更可控:

function custom_out_of_stock_notice() {
    global $product;
    
    // 先确保产品对象有效,避免意外报错
    if (!is_a($product, 'WC_Product')) return;
    
    // 检查库存状态
    if ($product->managing_stock() && $product->get_stock_quantity() <= 0) {
        echo '<p class="mb-2 out-of-stock-notice">' . __('** Sorry currently out of stock **', 'text-domain') . '</p>';
    }
}
// 优先级15表示在价格之后、加购按钮之前显示,你可以调整数字来改变位置
add_action('woocommerce_single_product_summary', 'custom_out_of_stock_notice', 15);

关键修复点说明:

  • 用$product->get_stock_quantity()替代$product->stock:这是WooCommerce官方推荐的getter方法,避免直接访问属性触发错误。
  • 匹配钩子的用途:woocommerce_get_availability需要返回数组,而woocommerce_single_product_summary适合直接输出自定义内容。
  • 增加产品对象检查:确保代码在没有产品对象的场景下不会报错,提升健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:52:46