Мне нужно отключить конкретный способ доставки, если пользователь выбрал оплату «Наложенный платеж». Проблема в том, что следующий код работает только в том случае, если я каждый раз сбрасываю переходные процессы WooCommerce и обновляю их. Он не работает при выборе пользователя вперед и назад.
add_filter( 'woocommerce_package_rates', 'alter_shipping_methods', 100 );
function alter_shipping_methods( $rates ) {
$chosen_gateway = WC()->session->chosen_payment_method;
// If payment is Cash on delivery remove specific shipping
if($chosen_gateway == 'cod') {
foreach ( $rates as $rate_id => $rate ) {
if ( $rate->label === 'Hrvatska pošta' ) {
unset( $rates[ $rate_id ] );
}
}
}
return $rates;
}
У меня есть этот код, который должен сработать, и я вижу вывод в консоли, когда нажимаю на опции.
jQuery(document.body).on('change', 'input[name="payment_method"]', function() {
console.log('Payment method changed');
jQuery('body').trigger('update_checkout');
});
Я пробовал с этим, не работает
function action_woocommerce_checkout_update_order_review($array, $int) {
WC()->cart->calculate_shipping();
return;
}
add_action('woocommerce_checkout_update_order_review', 'action_woocommerce_checkout_update_order_review', 10, 2);
И я также пробовал настраиваемый вызов AJAX, который вызывает функцию PHP, и внутри этого фильтра нет результата
add_filter( 'woocommerce_package_rates', 'alter_shipping_methods', 100 );
Что мне попробовать дальше?