Как я могу исправить эту проблему: in_array () ожидает, что параметр 2 будет массивом, null заданным в файле... на линии

Как я могу исправить эту проблему: in_array () ожидает, что параметр 2 будет массивом, null заданным в файле... на линии

20.11.2019 08:00:42 Просмотров 65 Источник

У меня проблема с этим кодом. Я получаю предупреждение: 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’ );

Было бы здорово, если кто-нибудь может мне помочь :-)

У вопроса есть решение - Посмотреть?

Ответы - Как я могу исправить эту проблему: in_array () ожидает, что параметр 2 будет массивом, null заданным в файле... на линии / How could I fix this problem: in_array () expects parameter 2 to be array, null given in file... on line

dkutin

20.11.2019 08:07:49

Судя по вашему коду, это может быть то, что массив $chosen_shipping_rateschosen_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();чтобы увидеть, если это решает вашу проблему.

mondersky

20.11.2019 09:41:57

в соответствии с вашим кодом и предположив, что $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’ );
Помочь в развитии проекта:
Закрыть X