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

WooCommerce产品编辑页报错:Call to a member function get_children() on null

解决WooCommerce可变商品编辑页致命错误的方案

问题原因

woocommerce_available_variation钩子不仅在前台商品页触发,后台产品编辑页加载时也会调用该钩子。你的代码或短代码中调用了get_children()方法,但后台环境下对应的WC_Product对象可能未正确初始化,导致对象为null,触发致命错误。

解决方案

通过环境判断和对象安全检查,限制自定义逻辑仅在前台执行,同时增强代码健壮性:

1. 修改钩子回调函数,添加后台跳过逻辑

在你的woocommerce_available_variation钩子处理函数中,先判断是否处于后台环境,直接返回原数据不执行自定义逻辑;同时检查对象有效性:

add_filter('woocommerce_available_variation', 'add_stock_notification_form_to_variation', 10, 3);
function add_stock_notification_form_to_variation($variation_data, $product, $variation) {
    // 后台环境直接返回,不执行自定义逻辑
    if (is_admin()) {
        return $variation_data;
    }

    // 双重保险:确保产品对象有效
    if (!is_a($product, 'WC_Product') || !is_a($variation, 'WC_Product_Variation')) {
        return $variation_data;
    }

    // 原有的缺货添加表单逻辑
    if (!$variation->is_in_stock()) {
        $variation_data['availability_html'] .= do_shortcode('[form__data]');
    }

    return $variation_data;
}

2. 优化短代码实现,添加安全检查

如果你的[form__data]短代码内部也调用了get_children()等产品对象方法,同样需要添加环境和对象检查:

function form__data_shortcode() {
    // 后台或非商品页直接返回空内容
    if (is_admin() || !is_product()) {
        return '';
    }

    global $product;
    // 确保当前产品是可变商品对象
    if (!is_a($product, 'WC_Product_Variable')) {
        return '';
    }

    // 原短代码逻辑,比如获取变体列表
    $variation_ids = $product->get_children();
    // ... 你的到货通知表单生成代码
}
add_shortcode('form__data', 'form__data_shortcode');

原理说明

  • is_admin()判断当前是否处于WordPress后台,直接跳过自定义逻辑,避免后台环境下的对象异常。
  • is_a()检查确保操作的对象是合法的WooCommerce产品实例,防止因对象为null导致的方法调用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:32:11