/ Сайтостроение / Плагины / Цены в зависимости от группы пользователей

Цены в зависимости от группы пользователей

HIT

14.12.2017

2465

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

WC Role Based Price

Плагин WC Role Based Price (6000) реализует это с помощью дополнительных полей в карточке товара. В настройках плагина мы выбираем роли, для которых цены могут отличаться. В бесплатной версии плагина это все.

Удобно, то что в настройках плагина можно выбрать определенные роли (например только созданные самостоятельно), которые будут выводится в товаре при активации функции Enable Role Based Pricing. Еще удобно, что группа дополнительных цен сохраняется ajax’ом без перезагрузки и сохранения всей страницы.

Из минусов — неудобная структура хранения цен в одном поле в виде массива. Пример, добавлено дополнительно 3 типа цен (без акционных):

a:3:{s:3:"vip";a:2:{s:13:"regular_price";s:5:"15000";s:13:"selling_price";s:0:"";}s:15:"large_wholesale";a:2:{s:13:"regular_price";s:5:"16500";s:13:"selling_price";s:0:"";}s:9:"wholesale";a:2:{s:13:"regular_price";s:5:"18000";s:13:"selling_price";s:0:"";}}

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

Pro версия за $59 предлагает такие дополнения:

  • Расписание скидки (в стандартном магазине это итак реализовано, но тут предлагается и для скидки для конкретной группы)
  • Динамическая цена (?)
  • Блокировка определенного способа оплаты в зависимости от роли
  • Блокировка оплаты товара в зависимости от роли (?)
  • Таблица со списком ролей и цен
  • Сопряжен с переключением валют (Aelia Currency Switcher Integration)
  • Сопряжен с массовым изменением цен (Bulk Price Updater)
  • Сопряжен с плагином WP All Import (можно импортировать цены)

WooCommerce Wholesale Prices (9000)

Предоставляет цену для оптовых покупателей, создавая особую роль Оптовый клиент. В админке: в товаре появляется новое поле — Wholesale Customer, а при выборе товаров колонку с оптовой ценой. В бесплатной версии все настройки заблокированы. Premium версия стоит 59 долларов, расширяет функционал:

  • Оптовые цены в WooCommerce
    Простота управления оптовой ценой по ролям пользователей. Глобальная скидка (%), скидка на категории (%) или индивидуальная оптовая цена.
  • Доставка, Налоговые и платежные шлюзы обрабатываются отдельно
    Назначить способы доставки и оплаты для оптовых клиентов.
  • Настройки каталог для оптовых клиентов
    Создание товаров «Только опт». Скрыть товары «Только розница» от оптовиков. Создание вариаций «Только опт».
  • Правила минимальной покупки
    Обеспечьте предварительную обработку заказа до оптового ценообразования. Минимальное количество товаров, которые нужно заказать. Минимальное количество отдельных товаров.

Woocommerce Role Pricing (1000)

Плагин не создает дополнительного поля цены у товаров. А воздействует глобально на все цены магазина в зависимости от роли.
Настройки метода: Выбираем метод скидки — ставка или количество. Применить для — основная цена или акционная цена. Выбираем — скидки или суммы.
Во вкладке роли выставляем коэффициент скидки для каждой из ролей.

В не зависимости от того какой выбран вариант воздействия на обычную цену или на скидочную цену. Скидка пользователя влияет на все цены.

Как это исправить:

В файле woocommerce-role-pricing/core/class-woorolepricinglight.php находим строки:

$type = get_option( "wrp-method", "rate" );
$result = 0;
if ($type == "rate") {

И все что идет в фигурных скобках оборачиваем в условие:

if ( $product->is_on_sale() ) {
	
	$result = $product->get_sale_price();						
	
} else {
	
	// if rate and price includes taxes
	if ( $product->is_taxable() && get_option('woocommerce_prices_include_tax') == 'yes' ) {
		$_tax       = new WC_Tax();
		$tax_rates  = $_tax->get_shop_base_rate( $product->get_tax_class() );
		$taxes      = $_tax->calc_tax( $baseprice, $tax_rates, true );
		$product_price      = $_tax->round( $baseprice - array_sum( $taxes ) );
	}

	$result = self::bcmul($product_price, $commission, WOO_ROLE_PRICING_LIGHT_DECIMALS);

	if ( $product->is_taxable() && get_option('woocommerce_prices_include_tax') == 'yes' ) {
		$_tax       = new WC_Tax();
		$tax_rates  = $_tax->get_shop_base_rate( $product->get_tax_class() );
		$taxes      = $_tax->calc_tax( $result, $tax_rates, false ); // important false
		$result      = $_tax->round( $result + array_sum( $taxes ) );
	}
	
}

Вывод базовой цены в этом плагине предполагается только в Pro версии (19$). Функция по выводу базовой цены:

// Вывести базовую цену
function woocommerce_low_cost() { 
	global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
	if ( !empty($user_role) ){
	if ( $user_role != 'administrator' ){
		global $product;
		if ( !$product->is_on_sale() ){
			echo '';
			echo $product->get_regular_price();
			echo '';
		}
	}
	}
};
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_low_cost', 15 );

Функция по выводу разницы «Ваша скидка» + вывод в карточке товара:

// Вывести базовую цену
function woocommerce_low_cost() { 
	global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
	if ( !empty($user_role) ){
		global $product;
		if ( !$product->is_on_sale() ){
			echo '<small class="role-sale">Скидка: ';
			$skidka = $product->get_regular_price() - $product->get_price();
			echo $skidka;
			echo ' руб.</small>';
		}
	}
};
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_low_cost', 15 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_low_cost', 15 );

Вычисляем общую сумму без скидки (этот код я вставляю напрямую в шаблон woocommerce/cart/cart-totals.php):

cart->get_cart() as $cart_item_key => $cart_item ) {
		$_product   = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
		$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
			
		if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
			$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key );
	
			$is_on_sale = $cart_item[data]->sale_price;
			if ( !empty($is_on_sale) ){
				$proprice = $cart_item[data]->sale_price;
				$proqt = $cart_item['quantity'];
			} else {
				$proprice = $cart_item[data]->regular_price;
				$proqt = $cart_item['quantity'];
			}
			$prototal[] = $proprice * $proqt;
		}
	}
	global $woocommerce;
	$basetotal = $woocommerce->cart->get_cart_total();
	$basetotalnum = preg_replace("/[^0-9]/", '', $basetotal);
	$total_role_sale = array_sum($prototal) - $basetotalnum;
	echo '<p class="role-sale">Ваша скидка: ' .$total_role_sale. ' р.</p>';
?>

preg_replace(«/[^0-9]/», », $basetotal); — php функция отбора из переменной только числовых значений

Либо можно сделать более универсально — функцией добавляющей данный расчет в нужные места Woocommerce

function woocommerce_low_cost_total() { 
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 );
		$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
			
		if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
			$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key );
	
			$is_on_sale = $cart_item[data]->sale_price;
			if ( !empty($is_on_sale) ){
				$proprice = $cart_item[data]->sale_price;
				$proqt = $cart_item['quantity'];
			} else {
				$proprice = $cart_item[data]->regular_price;
				$proqt = $cart_item['quantity'];
			}
			$prototal[] = $proprice * $proqt;
		}
	}
	global $woocommerce;
	$basetotal = $woocommerce->cart->get_cart_total();
	$basetotalnum = preg_replace("/[^0-9]/", '', $basetotal);
	$total_role_sale = array_sum($prototal) - $basetotalnum;
	echo '<p class="role-sale">Ваша скидка: ' .$total_role_sale. ' р.</p>';
}

add_action( 'woocommerce_widget_shopping_cart_before_buttons', 'woocommerce_low_cost_total', 15 ); // в миникорзину
add_action( 'woocommerce_cart_totals_after_order_total', 'woocommerce_low_cost_total', 15 ); // в корзину

И отдельная функция для шаблона оформления:

function woocommerce_low_cost_total_tr() { 
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 );
		$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
			
		if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
			$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key );
	
			$is_on_sale = $cart_item[data]->sale_price;
			if ( !empty($is_on_sale) ){
				$proprice = $cart_item[data]->sale_price;
				$proqt = $cart_item['quantity'];
			} else {
				$proprice = $cart_item[data]->regular_price;
				$proqt = $cart_item['quantity'];
			}
			$prototal[] = $proprice * $proqt;
		}
	}
	global $woocommerce;
	$basetotal = $woocommerce->cart->get_cart_total();
	$basetotalnum = preg_replace("/[^0-9]/", '', $basetotal);
	$total_role_sale = array_sum($prototal) - $basetotalnum;
	echo '<p class="role-sale">Ваша скидка: ' .$total_role_sale. ' р.</p>';
}
add_action( 'woocommerce_review_order_after_order_total', 'woocommerce_low_cost_total_tr', 15 ); // в шаблон оформления

Есть еще два полностью платных плагина по данной тематике — YITH Woocommerce Role Based Prices (60$) и Prices By User Role for WooCommerce (44$), но я их не тестировал.

Удалось попробовать плагин YITH Woocommerce Role Based Prices принцип его работы больше напоминает функционал Woocommerce Role Pricing, но с более гибкими настройками (скидки/наценки в виде процентов или количества к каждому товару или глобально).

Протестировал и плагин Prices By User Role for WooCommerce. Данный плагин дает возможность различных манипуляций с ценой и товаром в зависимости от роли: скрытие цены, скрытие товаров, скидка (% или руб) для групп. Но индивидульную цену на каждый товар этот плагин не поддерживает.

Price based on User Role for WooCommerce

Нашел еще один плагин, менее популярный чем предыдущие (700+), но дающий неплохой функционал по установке цен на каждый товар в зависимости от роли — Price based on User Role for WooCommerce. И при соответствующей доработке, этим плагином можно решать некоторые задачи. Выгодным отличием от WC Role Based Price (по крайней мере его бесплатной версии, платную не использовал) является структура хранения цен в метаполях. В этом смысле даже у плагина считаю перебор, т.к. он для каждой роли создает аж по три метаполя.

Перечислю тезисно что входит в функционал плагина:

  • Массовые правила для групп. Реализовано в виде коэффициента.
  • Цена в зависимости от роли для каждого товара.
  • Выбор набора ролей, которые будут выводится в товаре для назначения цен.
  • Скрыть цены либо глобально для роли, либо индивидуально для любого товара в зависимости от роли.
  • Поля доступны для массового редактирования в Advanced Bulk Edit.
  • Поля доступны для экспорта / импорта.
  • Поддержка вариаций.

И теперь о плохом, в бесплатной версии плагина допускается создание всего одного товара с ценами для ролей, видимо только для тестирования. Pro версия стоит 20$ (10.01.2019).

Тэги: , ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Woocommerce variations image swatch

Woocommerce variations image swatch

Описываю работу с плагином Woocommerce variations image swatch. Плагин создает подраздел настроек в настройках Woocommerce. Условно плагин можно разбить на 2 области: область изменения атрибутов вариаций, общие настройки отображения атрибутов Читать далее »

Использование купонов

Использование купонов

В ранних публикациях связанных со скидками woocommerce кое где мельком упоминались купоны. Рассмотрим более подробно тему купонов woocommerce, ведь они являются мощным инструментом маркетинга интернет-магазина. Создание купона Чтобы использовать купоны Читать далее »

Трекинг заказа

Трекинг заказа

Рассмотрим такой аспект работы интернет-магазина как трекинг заказа (order tracking), т.е. отслеживание статуса и местоположения заказа. YITH WooCommerce Order Tracking 8000 установок. В бесплатной версии добавляет к заказу (в админке) Читать далее »

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

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

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