WooCommerce: как отображать полосу на основе почтового индексаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 WooCommerce: как отображать полосу на основе почтового индекса

Сообщение Anonymous »

В версии WordPress 6.9 и версии WooCommerce 10.3.6
Я хочу отображать полосу в зависимости от зоны доставки.
Зона доставки 1 состоит из почтового индекса 3000.
Зона доставки 2 состоит из почтового индекса 4000.
пример:
Должен отображаться почтовый индекс 3000. Stripe.
Почтовый индекс 4000 или любые другие почтовые индексы должны скрывать Stripe.
В настоящее время я использую вебхук woocommerce_available_pay_gateways для отображения.

Код: Выделить всё

add_filter('woocommerce_available_payment_gateways', 'payment_gateways_based_on_chosen_shipping_method');

Код: Выделить всё

function payment_gateways_based_on_chosen_shipping_method($available_gateways)
{
$shouldReturnAll = true;
if( is_checkout() && ! is_wc_endpoint_url() && WC()->cart ) {
$shouldReturnAll = false;
}

if($shouldReturnAll){
return $available_gateways;
}

$chosen_shipping_methods = (array) WC()->session->get('chosen_shipping_methods');

$insideSelectiveDelivery = in_array('flat_rate:1', $chosen_shipping_methods); // This should display Stripe
$insideAustraliaDelivery = in_array('flat_rate:6', $chosen_shipping_methods); // This should hide Stripe
$outsideAustraliaDelivery = !$insideSelectiveDelivery && !$insideAustraliaDelivery;

if($outsideAustraliaDelivery && !$isLocalPickup){
return [];
}

......

if($insideSelectiveDelivery){
unset($available_gateways['cod']);
} else {
unset($available_gateways['stripe']);
}
return $available_gateways;
}
При этом Stripe скрывается, если пользователь добавляет почтовый индекс к 3000 (или обновляет страницу с 3000, как в сеансе).
Это также работает, если почтовый индекс равен 3000 -> меняется на 3001 (скрывает его) -> меняется на 3000 (показывает).
Проблема возникает, если пользователь вводит почтовый индекс, отличный от 3000 (например: 3001) и снова меняется на 3000.
В это время Stripe не отображается.
Я также пробовал использовать

Код: Выделить всё

$available_gateways['stripe']->settings['enabled'] = 'no';
$available_gateways['stripe']->enabled = 'no';
и включить его

Код: Выделить всё

$available_gateways['stripe']->settings['enabled'] = 'yes';
$available_gateways['stripe']->enabled = 'yes';
Но результат тот же. Это работает только в том случае, если исходный почтовый индекс равен 3000. Если пользователь запускается или почтовый индекс сеанса равен 3001, это не работает.
Отображается следующая ошибка:

Нет доступных способов оплаты. Пожалуйста, свяжитесь с нами для помощи в размещении заказа.


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-postcode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»