Добавление купонов через код

У меня на блоге уже есть урок, в котором я подробно рассказал о способах добавления товара в корзину программно, через код. Я решил на этом не останавливаться, и вот, перед вами урок про программное применение купона.

Прежде, чем мы перейдём непосредственно к примерам, добавление купона происходит при помощи метода корзины add_discount(), в который и передаётся название купона.

WC()->cart->add_discount( 'friday000' ); // применение купона "friday000"

Всё, теперь погнали к примерам.

Пример 1. Применяем купон, если определённый товар в корзине

В обоих примерах я планирую применять купон во время экшен-хука woocommerce_before_cart. Код вставляем в functions.php темы.

add_action( 'woocommerce_before_cart', 'truemisha_coupon_if_product_in_cart' );
 
function truemisha_coupon_if_product_in_cart() {
 
	$coupon_code = 'friday000';
	$product_id = 2; // ID товара, наличие которого в корзине проверяем
 
	// если товар в корзине
	if( WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product_id ) ) ) {
 
		// проверяем, что купон не добавлен, иначе будет много уведомлений
		if( ! WC()->cart->has_discount( $coupon_code ) ) {
			WC()->cart->add_discount( $coupon_code );
			wc_print_notices(); // удалить строку, если уведомление не нужно
		}
 
	} else{
 
		// удаляем купон, если товар не в корзине
		WC()->cart->remove_coupon( $coupon_code );
 
	}
 
}
  • По сути, если даже пользователь знает код купона, он никак не сможет его добавить сам, потому что у нас стоит автоудаление купона, если товара нет в корзине! А чтобы он не сделал этого на странице оформления заказа, то добавляем функцию в хук woocommerce_before_checkout_form.
  • Про то, как проверять, что определённые товары лежат в корзине, в том числе и вариативные товары, есть подробный урок здесь.

Пример 2. Применяем купон, если стоимость заказа больше определённой суммы

add_action( 'woocommerce_before_cart', 'truemisha_coupon_minimum_1000' );
 
function truemisha_coupon_minimum_1000() {
 
	$coupon_code = 'friday000';
	$minimum_amount = 1000; // задаём минимальную сумму заказа
 
	if( WC()->cart->subtotal > $minimum_amount ) { // больше тысячи
 
		// не забываем проверку, добавлен ли уже купон
		if( ! WC()->cart->has_discount( $coupon_code ) ) {
			WC()->cart->add_discount( $coupon_code );
			wc_print_notices();
		}
 
	} else{
 
		WC()->cart->remove_coupon( $coupon_code );
 
	}
 
}

Если вы будете использовать этот код, то полагаю вам пригодится урок, в котором я показывал, как добавить в корзину сообщение, что пользователя ждут бонусы, стоит только ему заказать на определённую сумму.

Миша

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

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

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

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

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

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