我对这段代码有一个问题。我收到警告: in_array()要求参数2为数组,文件中给出的是null ...在线上...
/**
* Filter payment gateways
*/
function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( ‘chosen_shipping_methods’ ) : array();
if ( in_array( ‘flexible_shipping_6_1’, $chosen_shipping_rates ) ) :
unset( $gateways[‘cod’] );
elseif ( in_array( ‘flexible_shipping_6_4’, $chosen_shipping_rates ) ) :
unset( $gateways[‘bacs’] );
unset( $gateways[‘paypal’] );
endif;
return $gateways;
}
add_filter( ‘woocommerce_available_payment_gateways’, ‘my_custom_available_payment_gateways’ );如果有人能帮我那就太好了:-)
发布于 2019-11-21 01:07:50
从您的代码判断,可能是$chosen_shipping_rates数组尚未初始化,正在解析为NULL。
例如,如果您要执行in_array('some string', $uninstantiated_array)
这将返回您正在接收的警告。
我的猜测是,这是因为设置了WC()->session,而不是WC()->session->get( ‘chosen_shipping_methods’ ),因此您将得到一个空数组。
尝试添加一个变量$chosen_shipping_methods = WC()->session->get( ‘chosen_shipping_methods’ ),然后使用( isset( $chosen_shipping_methods ) ) ? $chosen_shipping_methods : array();,看看这是否能解决您的问题。
发布于 2019-11-21 02:41:58
根据您的代码,并假设$chosen_shipping_rates有时不是数组,您可以通过确保只有在变量是数组时才执行负责的代码来避免这个问题:
/**
* Filter payment gateways
*/
function my_custom_available_payment_gateways( $gateways ) {
$chosen_shipping_rates = ( isset( WC()->session ) ) ? WC()->session->get( ‘chosen_shipping_methods’ ) : array();
if(isset($chosen_shipping_rates) && is_array($chosen_shipping_rates )){
if ( in_array( ‘flexible_shipping_6_1’, $chosen_shipping_rates ) ) :
unset( $gateways[‘cod’] );
elseif ( in_array( ‘flexible_shipping_6_4’, $chosen_shipping_rates ) ) :
unset( $gateways[‘bacs’] );
unset( $gateways[‘paypal’] );
endif;
}
return $gateways;
}
add_filter( ‘woocommerce_available_payment_gateways’, ‘my_custom_available_payment_gateways’ );https://stackoverflow.com/questions/58959676
复制相似问题