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

WooCommerce修改支付网关代码报in_array参数为null警告如何解决

问题原因

警告触发的核心是:你仅判断了WC()->session是否存在,但当会话存在时,WC()->session->get( 'chosen_shipping_methods' )有可能返回null(比如用户首次进入结算页、还未选择任何配送方式时,该会话值还未初始化),此时in_array()的第二个参数不符合数组要求,就会抛出对应警告。

修复方案

只需调整$chosen_rates的取值逻辑,确保无论会话取值结果是什么,最终拿到的都是数组类型即可,同时可以简化重复的判断逻辑:

function alter_payment_gateways( $list ) {
    // 获取用户选择的配送方式
    $chosen_rates = array();
    if ( isset( WC()->session ) ) {
        // 给get方法加第二个参数作为默认值,确保返回结果一定是数组
        $chosen_rates = WC()->session->get( 'chosen_shipping_methods', array() );
        // 额外加一层类型校验,避免极端情况返回非数组
        $chosen_rates = is_array( $chosen_rates ) ? $chosen_rates : array();
    }

    // 合并重复判断逻辑
    if( in_array( 'betrs_shipping:2-1', $chosen_rates ) || in_array( 'betrs_shipping:2-2', $chosen_rates ) ) {
        $list = array_diff( $list, array('WC_Gateway_COD') );
    }
    return $list;
}
add_action('woocommerce_payment_gateways', 'alter_payment_gateways');

修改说明

  • 给WC()->session->get()方法传入第二个参数array()作为默认值,当会话中不存在对应键时直接返回空数组,避免返回null
  • 额外增加了一层类型判断,极端情况下哪怕返回非数组值也会转换为空数组,彻底规避in_array()的参数类型错误
  • 合并了两处重复的判断分支,代码更简洁易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:21:02