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

WooCommerce中小计不足时隐藏COD的subtotal属性报错解决

解决WooCommerce中按订单小计禁用COD时的PHP警告问题

错误原因分析

  • 原代码未判断WC()->cart是否存在:在非购物车/结账页面(如后台、产品详情页),WC()->cart对象未初始化,直接访问subtotal会触发"Attempt to read property on null"警告。
  • 使用get_cart_subtotal()的问题:该方法返回带货币符号和格式化的字符串(例如$9.99),无法直接与数字进行大小比较,会导致类型错误。

修正后的代码

add_filter( 'woocommerce_available_payment_gateways', 'ts_disable_cod_based_on_subtotal' );
function ts_disable_cod_based_on_subtotal( $available_gateways ) {
    // 仅在前端且购物车有效时执行逻辑
    if ( is_admin() || ! WC()->cart || WC()->cart->is_empty() ) {
        return $available_gateways;
    }

    $minimum_subtotal = 10; // 订单小计最低阈值(美元)
    $cart_subtotal = WC()->cart->get_subtotal(); // 获取纯数字的小计值

    // 仅当COD网关存在且小计低于阈值时移除
    if ( $cart_subtotal < $minimum_subtotal && isset( $available_gateways['cod'] ) ) {
        unset( $available_gateways['cod'] );
    }

    return $available_gateways;
}

关键修改说明

  • 增加场景判断:通过is_admin()跳过后台逻辑,同时检查WC()->cart是否存在、购物车是否为空,彻底避免null警告。
  • 正确获取小计:使用get_subtotal()返回纯数字的订单小计,确保数值比较的准确性。
  • 安全移除网关:增加isset( $available_gateways['cod'] )判断,防止尝试移除未启用的COD网关时出现错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:00:04