В этом уроке я покажу, как в зависимости от суммы заказа в корзине (в заказе), вы можете управлять тем, какой метод оплаты отображать.
Прежде всего важно понимать, что страница оформления заказа – это не единственное место, где эти методы оплаты выводятся, у нас также есть и страница оплаты конкретного заказа, к ней например можно попасть через личный кабинет. Рассмотрим оба случая.
Кстати, в обоих случаях это делается при помощи фильтр-хука woocommerce_available_payment_gateways
.
Также рекомендую свой видеокурс по WooCommerce! 🚀
В примере ниже мы отключаем оплату при получении для заказов, чья сумма больше 1000 в валюте магазина.
add_filter( 'woocommerce_available_payment_gateways', 'truemisha_turn_off_cod' ); function truemisha_turn_off_cod( $available_gateways ) { if( is_wc_endpoint_url( 'order-pay' ) ) { return $available_gateways; } if ( WC()->cart->total > 1000 ) { unset( $available_gateways['cod'] ); // отключаем оплату при доставке } return $available_gateways; }
WC()->cart->total
считает общую сумму заказа, с учётом стоимости доставки, если вы хотите подсчитать только сумму товаров в корзине, то используйте WC()->cart->subtotal
cod
это ярлык метода оплаты «Оплата при доставке», как узнать другие? Ну во-первых, print_r()
никто не отменял, во вторых, стандартные это bacs
(Прямой банковский перевод), cheque
(Чековые платежи) и paypal
.functions.php
текущей темы.add_filter( 'woocommerce_available_payment_gateways', 'truemisha_turn_off_cod_pay_4_order' ); function truemisha_turn_off_cod_pay_4_order( $available_gateways ) { if( ! is_wc_endpoint_url( 'order-pay' ) || empty( $_GET[ 'key' ] ) ) { return $available_gateways; } $order_id = wc_get_order_id_by_order_key( $_GET[ 'key' ] ); $order = wc_get_order( $order_id ); if ( $order->get_total() > 1000 ) { unset( $available_gateways['cod'] ); // отключаем оплату при доставке } return $available_gateways; }
$_GET[ 'key' ]
, который можно преобразовать в ID оплачиваемого заказа, потом в объект заказа, а из объекта уже легко узнать либо общую сумму методом get_total()
, либо стоимость товаров в корзине методом get_subtotal()
.Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Добрый день.
А если я хочу оставить только оплату онлайн, если в Корзине лежит только определённый товар без добавления других? Можете примерикода написать?
Спасибо
Добрый,
Да, хорошо, в среду опубликую.
Сорри, передумал.
Итак, прежде всего вы можете использовать тот же хук
woocommerce_available_payment_gateways
.После этого прочекайте этот урок про проверку того, что товар в корзине.
И используйте какую-то переменную например, которую вы будете изменять на
true
илиfalse
в процессе ваших проверок. А по итогу проверок если эта переменная напримерtrue
, то отключаете всё, кроме оплаты онлайн.Добрый день,
Всё делаю как описано в пункте 1 , но получаю ошибку:
syntax error, unexpected 'function' (T_FUNCTION)
Что не так?
Добрый день,
Возможно точку с запятой потеряли
На эту строку ругается:
function truemisha_turn_off_cod_pay_4_order( $available_gateways ) {
Да, я понял,
ну перед ней точку с запятой упустили
Здравствуйте. Поиск по сайту не дал результата. Также интересует возможность отображения методов оплаты в зависимости от количества товаров .
на сайте есть возможность оплаты наличными и онлайн. Так вот мне надо отображать оплату наличкой, когда закажут минимальное необходимое кол-во товаров (6)
есть какие то решения? Спасибо
Добрый день,
Вот тут есть готовое решение для вас.
Большое спасибо. Заценил название функции) элегантный способ указать на авторство