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

WooCommerce获取选中配送方式报错:Call to a member function get() on null

解决WooCommerce支付网关控制函数的E_ERROR错误

错误原因

报错Uncaught Error: Call to a member function get() on null的核心原因有两个:

  1. 后台引导任务触发该函数时,WooCommerce会话对象(WC()->session)未初始化,直接调用get()方法导致空指针错误;
  2. 即使会话存在,若用户未选择任何配送方式,chosen_shipping_methods会是空数组,直接取索引[0]会引发数组越界问题。

修复后的代码

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_cash_on_delivery' );

function payment_gateway_cash_on_delivery( $available_gateways ) {
    // 排除后台环境,仅在前端结账流程执行逻辑
    if ( is_admin() || ! WC()->session ) {
        return $available_gateways;
    }

    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
    // 检查是否有选中的配送方式
    if ( empty( $chosen_shipping_methods ) ) {
        return $available_gateways;
    }

    $selected_shipping_id = $chosen_shipping_methods[0];
    
    if ( in_array( $selected_shipping_id, ['flexible_shipping_5_5', 'flexible_shipping_7_6'] ) && isset( $available_gateways['bacs'] ) ) {
        unset( $available_gateways['bacs'] );
    }

    return $available_gateways;
}

关键修复点

  • 后台环境过滤:通过is_admin()判断,避免后台任务触发时执行不需要的逻辑;
  • 会话存在性检查:确保WC()->session对象初始化后再调用get()方法;
  • 配送方式空值判断:先检查chosen_shipping_methods数组是否非空,再获取第一个元素,避免索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:20:58