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

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

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

С зарегистрированными понятно. Благодаря плагину 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>';

		}
		
	}

}

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

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

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

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

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