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

WooCommerce支付网关过滤报错:in_array()期望参数2为数组如何解决?

解决PHP警告:in_array() expects parameter 2 to be array, null given

问题原因

当前代码中,虽然判断了WC()->session是否存在,但WC()->session->get('chosen_shipping_methods')有可能返回null(比如用户未选择配送方式时),导致in_array()调用时第二个参数不是数组,触发警告。

修改方案

方案一:强制确保变量为数组(推荐)

直接在初始化$chosen_shipping_rates时,用强制类型转换保证它始终是数组:

function my_custom_available_payment_gateways( $gateways ) 
{
    // 强制转换为数组,避免get方法返回null导致的类型错误
    $chosen_shipping_rates = isset( WC()->session ) ? (array) WC()->session->get( 'chosen_shipping_methods' ) : array();

    if ( in_array( 'flexible_shipping_single:7', $chosen_shipping_rates ) ) :
        unset( $gateways['bacs'] );
        unset( $gateways['ppcp-gateway'] );
        unset( $gateways['przelewy24'] );

    elseif ( in_array( 'flexible_shipping_single:8', $chosen_shipping_rates ) ) :
        unset( $gateways['bacs'] );
        unset( $gateways['ppcp-gateway'] );
        unset( $gateways['przelewy24'] );

    endif;
    return $gateways;
}

add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

方案二:调用in_array前检查数组类型

在每次使用in_array()前,先验证$chosen_shipping_rates是否为数组:

function my_custom_available_payment_gateways( $gateways ) 
{
    $chosen_shipping_rates = isset( WC()->session ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();

    // 先确认变量是数组,再执行in_array判断
    if ( is_array( $chosen_shipping_rates ) && in_array( 'flexible_shipping_single:7', $chosen_shipping_rates ) ) :
        unset( $gateways['bacs'] );
        unset( $gateways['ppcp-gateway'] );
        unset( $gateways['przelewy24'] );

    elseif ( is_array( $chosen_shipping_rates ) && in_array( 'flexible_shipping_single:8', $chosen_shipping_rates ) ) :
        unset( $gateways['bacs'] );
        unset( $gateways['ppcp-gateway'] );
        unset( $gateways['przelewy24'] );

    endif;
    return $gateways;
}

add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

两种方案都能解决警告问题,方案一从源头确保变量类型,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:55:18