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

Woocommerce调用null对象get_stock_quantity()报错排查求助

错误根因分析
  • 堆栈日志显示WPML翻译队列后台页面调用woocommerce_get_availability_text过滤器时,传入的第二个产品参数为NULL,你在自定义函数中额外声明了global $product覆盖了过滤器传入的参数,而WPML后台页面不存在全局初始化的产品对象,所以调用get_stock_quantity()时直接触发空对象报错
  • 该问题和你使用的空翻译字符串__( '', 'babasouk' )无关联,不需要调整翻译写法
修复方案

你需要对自定义代码做三处调整:删除多余的全局产品声明、增加产品对象有效性校验、补充分类判断的产品ID参数,修复后的完整代码如下:

function bbloomer_show_stock_shop() {
  global $product;
  echo wc_get_stock_html( $product );
}
// CHANGE STOCK MESSAGES
add_filter( 'woocommerce_get_availability_text', 'bbloomer_custom_get_availability_text', 99, 2 );

function bbloomer_custom_get_availability_text( $availability, $product ) {
  // 先校验产品对象是否有效,无效直接返回原文本
  if ( ! is_a( $product, 'WC_Product' ) ) {
    return $availability;
  }
  $stock = $product->get_stock_quantity();
  // 全局库存规则
  if ( ! $product->is_in_stock() ) {
    $availability = __( 'Sorry, I am sold out!', 'babasouk' );
  }
  if ( $product->is_in_stock() && $stock >= 2 ) {
    $availability = __( '', 'babasouk' );
  }
  // 分类排除规则,补全产品ID参数
  if ( has_term( array( 'ORIGINAL ARTWORKS', 'OEUVRES ORIGINALES' ), 'product_cat', $product->get_id() ) ) {
    if ( $product->is_in_stock() && $stock == 1 ) {
      $availability = __( '', 'babasouk' );
    }
  } else if ( $product->is_in_stock() && $stock == 1 ) {
    $availability = __( 'Only 1 Available!', 'babasouk' );
  }
  return $availability;
}
验证步骤
  • 替换主题functions.php中原代码后,先访问WPML翻译队列页面确认不再触发致命错误
  • 再访问前台商品分类页、商品详情页,确认库存提示逻辑和修改前完全一致即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:03