Блог

Зависимость оплаты от выбранной доставки

Если нам надо скрыть какой-то способ оплаты при Самовывозе например оплата через PayPal то для этого нам понадобится такой код.
Его нужно вписать в файл functions.php вашей темы, который лежит в корне папки /wp-content/themes/название_вашей_темы
function alter_shipping_methods($available_gateways){
global $woocommerce;
$chosen_titles = array();
$available_methods = $woocommerce->shipping->get_packages();
$chosen_rates = ( isset( $woocommerce->session ) ) ? $woocommerce->session->get( 'chosen_shipping_methods' ) : array();
foreach ($available_methods as $method)
foreach ($chosen_rates as $chosen) {
if( isset( $method['rates'][$chosen] ) ) $chosen_titles[] = $method['rates'][ $chosen ]->label;
}
if( in_array( 'Самовывоз', $chosen_titles ) ) {
unset($available_gateways['paypal']);
}
return $available_gateways;
}
add_action('woocommerce_available_payment_gateways', 'alter_shipping_methods');

В строке if( in_array( 'Самовывоз', $chosen_titles ) ) { слово Самовывоз это фактическое название доставки оно может быть и доставка почтой и доставка Курьером как угодно, все завесит как вы назвали свою доставку
в строке unset($available_gateways['paypal']); вместо paypal указываем ID шлюза название способа платы который модно посмотреть в настройке оплаты

доставка и оплата

Вот все стандартные Иды шлюзов оплаты

Прямой банковский перевод bacs
Оплата чеком cheque
Наложенный платеж cod
PayPal paypal
В примере я убрал оплата чеком при самовывозе

Чтобы повторить данную процедуру но сдругии способом доставки и оплаты то просто скопируетй код и измените название функции alter_shipping_methods например на alter_shipping_methods1 в начале и в конце кода

Поделиться постом

5
Оставить комментарий

avatar
5 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
5 Авторы комментариев
АндрейВадимАнатолийСтасикГригорий Авторы недавних комментариев
  Подписаться  
новее старее большинство голосов
Уведомление о
Григорий
Гость
Григорий

Спасибо! Как раз то что искал, очень помогло!
Иду по вашим статьям по очереди и применяю у себя все что мне подходит

Стасик
Гость
Стасик

а можно ли реализовать такое:

при переходе на страницу оформления заказа, чтобы отображались способы оплаты в зависимости от категории товара, находящегося в корзине?

Анатолий
Гость
Анатолий

Добрый день. А мне нужно скрыть платную доставку при условии ,что выполняется условие бесплатной доставки. Как это прописать?

Вадим
Гость
Вадим

Код отлично работает.

Но когда используется какой-нибудь плагин группировки доставки(например Multiple Packages for Shipping), появляется баг:
при первой оплате всё срабатывает, но если в той же сессии попытаться оформить заказ заново, то метод оплаты для доставки которая до этого не использовалась может отсутствовать.

Есть ли какое-либо решение в данном случае? надо как-то обновлять все доступные методы в той же сессии.

Андрей
Гость
Андрей

Большое спасибо, быстро и удобно!