В моем случае необходимо было сделать так, чтобы при выборе способа доставки “Доставка в другие страны” оставался только один способ оплаты (Оплата по счету).
Для этого необходимо вставить следующий код в functions.php вашей темы (если используете активную дочернею тему, то вставить в functions.php дочерней темы):
// отключаем способ оплаты картой Webpay, если клиент выбран способ доставки "в другие страны"
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );
function payment_gateways_based_on_chosen_shipping_method( $available_gateways ) {
// Не в бэкэнде (администратор) и не на странице оплаты заказа
if( is_admin() || is_wc_endpoint_url('order-pay') )
return $available_gateways;
// Получить выбранные способы доставки
$chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );
if ( in_array( 'C', $chosen_shipping_methods ) )
{
unset( $available_gateways['essl_webpay_gateway'] );
}
return $available_gateways;
}
local_pickup:10 – способ доставки.
essl_webpay_gateway – способ оплаты, который необходимо отключить.
Результат:

При выборе других способов доставки отображаются оба варианта оплаты:

В следующем примере будут включены / отключены платежные шлюзы в зависимости от выбранного способа доставки. У нас есть 3 способа доставки и 3 платежных шлюза. Каждый выбранный способ доставки позволяет использовать только один платежный шлюз.
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method' );
function payment_gateways_based_on_chosen_shipping_method( $available_gateways ) {
// Не в бэкэнде (администратор) и не на странице оплаты заказа
if( is_admin() || is_wc_endpoint_url('order-pay') )
return $available_gateways;
// Получить выбранные способы доставки
$chosen_shipping_methods = (array) WC()->session->get( 'chosen_shipping_methods' );
if ( in_array( 'flat_rate:12', $chosen_shipping_methods ) )
{
unset( $available_gateways['bacs'] );
unset( $available_gateways['cod'] );
}
elseif ( in_array( 'flat_rate:14', $chosen_shipping_methods ) )
{
unset( $available_gateways['bacs'] );
unset( $available_gateways['paypal'] );
}
elseif ( in_array( 'free_shipping:10', $chosen_shipping_methods ) )
{
unset( $available_gateways['cod'] );
unset( $available_gateways['paypal'] );
}
return $available_gateways;
}
Еще один вариант. Необходимо при выборе способа доставки “Самовывоз” убрать способ оплаты “Оплату наличными курьеру”. В functions.php дочерней темы вставляем следующий код:
function payment_gateway_disable_country($available_gateways) {
global $woocommerce;
$packages = $woocommerce->shipping->get_packages();
foreach ( $packages as $i => $package ) {
$chosen_method = isset( $woocommerce->session->chosen_shipping_methods[ $i ] ) ?
$woocommerce->session->chosen_shipping_methods[ $i ] : '';
if ('local_pickup:1' == $chosen_method) {
unset($available_gateways['cheque']);
break;
}
}
return $available_gateways;
}
add_filter(
'woocommerce_available_payment_gateways',
'payment_gateway_disable_country'
);
‘local_pickup:1’ – это ID способа доставки “Самовывоз”;
‘cheque’ – это ID способа оплаты “Оплата наличными курьеру”.
При выборе способа доставки “Курьером” – отключаем способ оплаты “Оплата наличными либо картой при самовывозе”. Добавляем следующий код:
if ('flat_rate:2' == $chosen_method) {
unset($available_gateways['cod']);
break;
}
‘flat_rate:2’ – это ID способа доставки “Курьером”;
‘cod’ – это ID способа оплаты “Оплата наличными либо картой при самовывозе”.