Отключение методов оплаты в зависимости от суммы заказа

В этом уроке я покажу, как в зависимости от суммы заказа в корзине (в заказе), вы можете управлять тем, какой метод оплаты отображать.

Прежде всего важно понимать, что страница оформления заказа – это не единственное место, где эти методы оплаты выводятся, у нас также есть и страница оплаты конкретного заказа, к ней например можно попасть через личный кабинет. Рассмотрим оба случая.

Кстати, в обоих случаях это делается при помощи фильтр-хука woocommerce_available_payment_gateways.

Также рекомендую свой видеокурс по WooCommerce! 🚀

1. На странице оформления заказа

В примере ниже мы отключаем оплату при получении для заказов, чья сумма больше 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.
  • Также на строке 5 при помощи функции is_wc_endpoint_url() мы делаем проверку, что находимся НЕ на странице оплаты конкретного заказа, всё дело в том, что там сумма заказа будет вычисляться совсем другим спосбом. Обратите внимание, что условный тег is_checkout() нам не подходит.
  • Если не знаете, куда вставлять код из урока – вставляйте в functions.php текущей темы.

2. На странице оплаты конкретного заказа

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().

Миша

Недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 3

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

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.