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

