/ Адаптивность / Скидка за первый заказ

Скидка за первый заказ

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

С зарегистрированными понятно. Благодаря плагину WooCommerce Extended Coupon Features FREE (30 000) ставим роль Customer и лимит на одного пользователя. Минусом данного способа является то что пользователю нужно сначала зарегистрироваться или авторизоваться.

Для того чтобы купон срабатывал автоматически, без введения, в настройках плагина WooCommerce Extended Coupon Features FREE (Miscellaneous) нужно включить Auto coupon.

Скидка для незарегистрированного пользователя

Разрешаем регистрацию и авторизацию при оформлении заказа:

Делаем регистрацию принудительной:

jQuery('#createaccount').attr('checked',true);

И скрываем чекбокс «Хотите зарегистрироваться?»:

.woocommerce-account-fields {display: none;}

После оформления заказа пользователю на указанный e-mail помимо заказа придет письмо о регистрации на сайте (с автоматическими логином и паролем). Если пользователь выйдет из учетки и захочет еще раз совершить заказ, то при вводе той же почты ему выведется уведомление «Пользователь с таким e-mail уже существует», а т.к. тут же в Оформлении выведена форма для авторизации, пользователь должен либо ввести новую почту, либо авторизоваться.

Конечно пользователь может ввести фейковую почту. Но в этом случае он не получит на нее заказ.

Также пользователь может использовать свои несколько почтовых ящиков, но это он может сделать и при скидке только для зарегистрированных пользователей (для создания нескольких учеток).

Всплывающее окно «Скидка за первый заказ»

Для того чтобы определить первый ли заказ у пользователя делаем функцию:

function get_user_orders_total($user_id) {
    // Use other args to filter more
    $args = array(
        'customer_id' => $user_id,
	'posts_per_page' => -1
    );
    // call WC API
    $orders = wc_get_orders($args);

	
    if (empty($orders) || !is_array($orders)) {
        return false;
    }
	
	// Количество заказов
	if ($user_id == 0) {
        $total = 0;
    } else {
		$total = count($orders);
	}
	
	// Сумма всех заказов
	/*$total = array_reduce($orders, function ($carry, $order) {
		$carry += (float)$order->get_total();

		return $carry;
	}, 0.0);*/

    return $total;
}

Далее с помощью этой функции создаем условие:

$cur_user_id = get_current_user_id();
if ( !get_user_orders_total($cur_user_id) >= 1 ) {
	
	//Выводим функционал всплывающего окна
	
}

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

jQuery(document).ready(function() {
	
	if(!location.href.match(/cart/) && !location.href.match(/product\//) && !location.href.match(/checkout/)) {
	
		//скрипт вывода всплывающего окна
		
	}
	
});
Если в условии location.href.match прописать /product/, то скрипт не будет срабатывать и в категории, т.к. в их url содержится product в префиксе category-product. А \/ добавляет в переменную экранированный слэш.

Скидка для зарегистрированных пользователей (всегда), но кроме позиций у которых количество более 2 шт

Данная механика нужна если на сайте действует глобально система скидок от количества позиций (от 3 шт — 10% скидка на эту позицию), а скидку (10%) нужно дать зарегистрированным пользователям только на позиции которых менее 3 шт.

// Акция 10% зарегистрированным пользователям (кроме позиций которых более 2 шт)

add_action( 'woocommerce_cart_calculate_fees','wc_custom_surcharge', 10, 1 );
function wc_custom_surcharge( $cart ) {
	
	if ( is_user_logged_in() ) {
	
		if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

		foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

			$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );

			if ( $cart_item['quantity'] < 3 ) {
				$all_prices[] = $_product->get_price() * $cart_item['quantity'];
			}

		}

		if ( isset($all_prices) ) {

			$fee_descript = 'Скидка 10% зарегистрированным пользователям';
			$fee = round(array_sum($all_prices), 2) * 0.1;

			$cart->add_fee( __($fee_descript, 'woocommerce'), -$fee, true );

		}	
		
	}

}


// Вывести информацию о скидке в корзине перед Итого
add_action( 'woocommerce_before_cart_totals','print_message_wc_custom_surcharge', 7, 1 );

function print_message_wc_custom_surcharge() {
	
	if ( is_user_logged_in() ) {
	
		foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

			$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );

			if ( $cart_item['quantity'] < 3 ) {
				$all_prices[] = $_product->get_price() * $cart_item['quantity'];
			}

		}

		if ( isset($all_prices) ) {

			$symbol = get_woocommerce_currency_symbol('RUB');
			$skidka = round(array_sum($all_prices), 2) * 0.1;

			echo '<p>Скидка 10% зарегистрированным пользователям: <strong><bdi>'.$skidka.' '.$symbol.'</bdi></strong></p>';

		}
		
	}

}

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Скидка за первый заказ Скидка за первый заказ
Показать вариации как простые товары
Рекомендации для васПоказать вариации как простые товарыOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.