Как установить минимальную сумму для заказа?

Эта задачка недавно прилетела к моему другу.

Как уже вы поняли из заголовка, нужно было сделать так, чтобы невозможно было оплатить заказ, если он на недостаточную сумму. И вот что мы сделаем:

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

Шаг 1. Добавляем уведомления на страницу Корзины и Оформления заказа

Уведомление о минимальной сумме заказа в корзине WooCommerce

Код из этого урока мы вставляем в functions.php текущей или дочерней темы.

add_action( 'woocommerce_before_cart', 'truemisha_minimum_order_amount' );
 
function truemisha_minimum_order_amount(){
 
	$minimum_amount = 1000;
 
	if ( WC()->cart->subtotal < $minimum_amount ) {
 
		wc_print_notice(
			sprintf(
				'Минимальная сумма заказа %s, а у вы хотите заказать всего лишь на %s.' ,
				wc_price( $minimum_amount ),
				wc_price( WC()->cart->subtotal )
			),
			'notice'
		);
	}
 
}
  • На строке 5 мы вручную устанавливаем минимальную сумму для заказа, хотя правильнее было бы поместить её где-нибудь в настройках и вытаскивать функцией get_option().
  • WC()->cart->subtotal, как вы догадались, возвращает общую сумму товаров в корзине без учёта стоимости доставки.
  • wc_print_notice() – это удобная функция для вывода уведомлений в WooCommerce.
  • wc_price() позволяет отформатировать числовое значение цены – добавить знак валюты, разделитель целых и дробных частей, и т.д.
  • В ядре WooCommerce вообще очень часто используется функция sprintf(), привыкайте к этому.

Для того, чтобы вывести точно то же самое на странице оформления заказа, мы можем законнектить нашу функцию к хуку woocommerce_before_checkout_form вот так:

add_action( 'woocommerce_before_checkout_form', 'truemisha_minimum_order_amount' );

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

Шаг 2. Блокируем возможность оформления заказа с маленькой суммой

Тут нам поможет другой хук WooCommerce – woocommerce_checkout_process.

add_action( 'woocommerce_checkout_process', 'truemisha_no_checkout_min_order_amount' );
 
function truemisha_no_checkout_min_order_amount() {
 
	$minimum_amount = 1000;
 
	if ( WC()->cart->subtotal < $minimum_amount ) {
 
		wc_add_notice( 
			sprintf( 
				'Минимальная сумма заказа %s, а у вы хотите заказать всего лишь на %s.',
				wc_price( $minimum_amount ),
				wc_price( WC()->cart->subtotal )
			),
			'error'
		);
 
	}
 
}

В итоге при нажатии на кнопку «Подтвердить заказ» у нас будет вылетать такое сообщение:

Ошибка о минимальной сумме заказа во время оформления заказа WooCommerce

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

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

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал