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

Dokan商店关闭时禁止加购代码报Call to a member function get_id()错误如何修复

错误原因

  • 原代码依赖全局$product变量获取商品对象,但woocommerce_is_purchasable钩子触发的部分场景下,全局商品对象尚未完成初始化,值为null,调用get_id()方法就会触发成员函数调用的致命错误。
  • 原代码没有正确接收woocommerce_is_purchasable钩子默认传递的商品对象参数,反而依赖可靠性低的全局变量是核心问题。

修复代码

将你原有的代码替换为以下内容即可:

add_filter( 'woocommerce_is_purchasable', function($is_purchasable, $product) {
    // 商品对象有效性校验,异常场景直接返回原状态
    if ( !is_a($product, 'WC_Product') ) {
        return $is_purchasable;
    }
    $seller_id = get_post_field('post_author', $product->get_id());
    // 兼容Dokan插件停用的场景,避免函数不存在报错
    if ( function_exists('dokan_is_store_open') ) {
        $is_purchasable = dokan_is_store_open( $seller_id );
    }
    return $is_purchasable;
}, 1000, 2);

修复说明

  • 回调末尾新增的参数2,用于声明该回调需要接收钩子传递的2个参数(原可购买状态、商品对象),直接使用WooCommerce官方传入的可靠商品对象,完全不需要依赖全局变量。
  • 新增的类型校验和函数存在性校验,可以兼容插件停用、异常调用等边缘场景,不会触发站点报错。
  • 简化了原有逻辑,直接返回店铺状态的布尔值即可,不需要额外赋值判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:54:03