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

开发WooCommerce插件时遇到致命错误:Uncaught Error: Call to a member function get_type() on string

解决WooCommerce插件中的致命错误

看起来你的问题出在两个关键细节上:手动加载wp-load.php的错误方式,以及在wp_head钩子中依赖未正确初始化的$product全局变量。让我一步步帮你梳理解决:

1. 移除手动引入wp-load.php的代码

直接写require_once ($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');是非常不规范的做法。WordPress的插件加载机制会自动完成环境初始化,手动引入不仅会导致重复加载、路径适配错误(比如站点不在服务器根目录时),还可能直接触发致命错误。直接删掉这行代码就好。

2. 修正产品对象的获取逻辑

在wp_head钩子执行时,$product全局变量可能还没被正确初始化(比如缓存页面、自定义模板场景下),直接调用$product->get_type()会因为$product是null或非WC_Product对象而报错。

你应该改用WooCommerce官方提供的安全方式获取产品对象,同时增加有效性校验。修正后的代码如下:

add_action( 'wp_head', 'my_custom_plugin' );
function my_custom_plugin() {
    // 先确认当前是产品页面
    if (is_product()) {
        // 通过当前查询对象ID获取产品,再实例化产品对象
        $product_id = get_queried_object_id();
        $product = wc_get_product($product_id);
        
        // 确保产品对象有效后再执行逻辑
        if ($product instanceof WC_Product) {
            $product_type = $product->get_type();
            if ($product_type == 'variable') {
                // 这里写你的业务逻辑
            }
        }
    }
}

额外优化建议

如果你的业务逻辑不需要在wp_head中执行,更推荐使用WooCommerce专属的产品钩子(比如woocommerce_single_product_summary),这类钩子会确保产品对象已经完全初始化,能从根源避免类似问题。另外,开发插件时尽量依赖官方提供的函数,减少对全局变量的依赖,代码会更健壮、兼容性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:14:07