使用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
相关产品推荐
相关产品推荐

