Mam problem z tym kodem. Otrzymuję ostrzeżenie: in_array () oczekuje, że parametr 2 będzie tablicą, wartość null podana w pliku ... on line ...

 /**
* 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’ );

Będzie miło, jeśli ktoś mi pomoże :-)

0
Anny 20 listopad 2019, 20:00

2 odpowiedzi

Sądząc po Twoim kodzie, może być tak, że tablica $chosen_shipping_rates nie została zainicjowana i jest przekształcana na NULL.

Na przykład, gdybyś miał zrobić in_array('some string', $uninstantiated_array)

To zwróci ostrzeżenie, które otrzymujesz.

Domyślam się, że dzieje się tak, ponieważ ustawiono WC()->session, ale nie WC()->session->get( ‘chosen_shipping_methods’ ), a zatem otrzymujesz tablicę NULL.

Spróbuj sprawdzić, czy dodanie zmiennej $chosen_shipping_methods = WC()->session->get( ‘chosen_shipping_methods’ ), a następnie użycie ( isset( $chosen_shipping_methods ) ) ? $chosen_shipping_methods : array();, aby sprawdzić, czy to rozwiąże problem.

1
dkutin 20 listopad 2019, 20:12

Zgodnie z twoim kodem i zakładając, że $ selected_shipping_rates czasami nie jest tablicą, możesz uniknąć problemu, upewniając się, że wykonywany jest odpowiedzialny kod tylko wtedy, gdy zmienna jest tablicą:

/**
* 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’ );
0
mondersky 20 listopad 2019, 21:41