- Home
- Categorie
- Coding e Sistemistica
- WordPress
- WooCommerce: errore in un filtro al checkout blocca richieste api
-
WooCommerce: errore in un filtro al checkout blocca richieste api
Buongiorno a tutti,
sto riscontrando un problema con questo snippet:add_filter('woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method'); function payment_gateways_based_on_chosen_shipping_method($available_gateways) { // Not in backend (admin) and Not in order pay page if (is_admin() || is_wc_endpoint_url('order-pay')) return $available_gateways; // Recupera il metodo di spedizione scelto $chosen_shipping_methods = (array) WC()->session->get('chosen_shipping_methods'); if (in_array('flat_rate:5', $chosen_shipping_methods)) // se è il metodo "contrassegno" { unset($available_gateways['bacs']); // unset Bonifico unset($available_gateways['paypal']); // unset PayPal unset($available_gateways['ppcp-gateway']); unset($available_gateways['stripe']); // unset Stripe unset($available_gateways['woocommerce_payments']); // unset WC-Payments } elseif (in_array('flat_rate:1', $chosen_shipping_methods)) // nel caso sia "tariffa unica" { unset($available_gateways['cod']); } return $available_gateways; }
Lo snippet funziona e serve per eslcudere i metodi pagamento non necessari se viene selezionato come metodo di invio il contrassegno. Lo snippet è in uso da mesi.
Tuttavia, oggi ha iniziato a dare problemi con le API.
Le chiamate API vengono bloccate con un 500. Lo snippet e il sito continuano a funzionare, nascondendo i metodi di pagamento correttamente, ma tutte le chiamate API falliscono perché viene segnalato un errore alla riga$chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );
Qui il testo dell'errore dal log:
01-Feb-2023 10:20:12 UTC] PHP Fatal error: Uncaught Error: Call to a member function get() on null in /home/customer/www/*****/public_html/wp-content/mu-plugins/pbp_custom-wc.php:46 Stack trace: #0 /home/customer/www/*****/public_html/wp-includes/class-wp-hook.php(308): payment_gateways_based_on_chosen_shipping_method(Array) #1 /home/customer/www/*****/public_html/wp-includes/plugin.php(205): WP_Hook->apply_filters(Array, Array) #2 /home/customer/www/*****/public_html/wp-content/plugins/woocommerce/includes/class-wc-payment-gateways.php(163): apply_filters('woocommerce_ava...', Array) #3 /home/customer/www/*****/public_html/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-wc-gateway/services.php(1322): WC_Payment_Gateways->get_available_payment_gateways() #4 /home/customer/www/*****/public_html/wp-content/plugins/woocommerce-paypal-payments/lib/packages/Dhii/Container/DelegatingContainer.php(117): WooCommerce\PayPalCommerce\WcGateway\WCGatewayModule::WooCommerce\PayPalCommerce\WcGateway\{closure}(Ob in /home/customer/www/*****/public_html/wp-content/mu-plugins/pbp_custom-wc.php on line 46
Non sono sicuro dell'errore. Sbaglio metodo?
-
Risolto.
Per chi fosse interessato, è stato risolto aggiungendo un check sulla sessione. La riga incriminata è stata modificata in questo modo:$chosen_shipping_methods = WC()->session && WC()->session->get( 'chosen_shipping_methods' ) ? WC()->session->get( 'chosen_shipping_methods' ) : array();