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

WooCommerce中针对欧盟国家的价格固定过滤器代码导致REST API崩溃的问题及解决方案问询

解决WooCommerce REST API崩溃问题,同时保留欧盟国家固定价格逻辑

嘿,你找对方向了!REST API调用时WC()->customer确实会是null——因为API请求大多不携带前端的用户会话,客户对象根本没初始化,直接调用它的方法肯定会触发报错。咱们可以分几步完善代码,既解决API崩溃问题,又保留原有的欧盟国家固定价格逻辑:

改进后的完整代码

add_filter('wc_aelia_tdbc_keep_prices_fixed', function($keep_prices_fixed): bool {
    // 默认不启用固定价格,除非满足所有条件
    $keep_prices_fixed = false;

    // 先判断是否是REST API请求,直接返回默认值,避免不必要的逻辑
    if (defined('REST_REQUEST') && REST_REQUEST) {
        return $keep_prices_fixed;
    }

    // 核心检查:确保WC客户对象已初始化,不是null
    if (isset(WC()->customer) && !is_null(WC()->customer)) {
        $billing_country = WC()->customer->get_billing_country();
        
        // 额外检查:确保账单国家不为空值,避免无效判断
        if (!empty($billing_country)) {
            $countries = new WC_Countries();
            $eu_countries = $countries->get_european_union_countries();
            
            // 最后判断当前账单国家是否属于欧盟
            if (in_array($billing_country, $eu_countries)) {
                $keep_prices_fixed = true;
            }
        }
    }

    return $keep_prices_fixed;
});

关键改进点说明

  • 默认值兜底:一开始就把$keep_prices_fixed设为false,不管什么异常情况,都不会意外启用固定价格
  • REST API快速判断:通过REST_REQUEST常量直接识别API请求,直接返回默认值,跳过后续逻辑,彻底避免API场景下的客户对象问题
  • 客户对象安全检查:用isset(WC()->customer) && !is_null(WC()->customer)确保对象存在后,再调用get_billing_country()
  • 空值防护:检查账单国家是否为空,避免空字符串传入in_array导致的无效判断

这样修改后,前端的欧盟国家固定价格逻辑完全保留,同时REST API请求再也不会因为null对象调用而崩溃了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:34:06