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 :-)
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.
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’ );
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.