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
相关产品推荐
相关产品推荐

