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?