Добавляем и настраиваем в woocommerce различные системы скидок.
Стандартная скидка Woocommerce
Можно включить «акционную» цену на товар, к ней можно добавить дату окончания скидки. У товара появляется лэйбл «Распродажа», можно изменить на «Акция» или SALE переводом.
Вывести процент скидки
для этого нужно создать файл percentage.php (в директории woocommerce/single-product/) с содержимым:
<?php /** * Product sale percentage * * @author WooThemes * @package WooCommerce/Templates * @version 1.6.4 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } global $post, $product; ?> <?php if ($product->is_on_sale() && $product->product_type == 'variable') : ?> <div class="percentage"> <div class="inside"> <div class="inside-text"> <?php $available_variations = $product->get_available_variations(); $maximumper = 0; for ($i = 0; $i < count($available_variations); ++$i) { $variation_id=$available_variations[$i]['variation_id']; $variable_product1= new WC_Product_Variation( $variation_id ); $regular_price = $variable_product1 ->regular_price; $sales_price = $variable_product1 ->sale_price; $percentage= round((( ( $regular_price - $sales_price ) / $regular_price ) * 100),1) ; if ($percentage > $maximumper) { $maximumper = $percentage; } } echo $price . sprintf( __('%s', 'woocommerce' ), $maximumper . '%' ); ?></div> </div> </div><!-- end callout --> <?php elseif($product->is_on_sale() && $product->product_type == 'simple') : ?> <div class="percentage"> <div class="inside"> <div class="inside-text"> <span style="font-family: 'Open Sans', sans-serif; font-size:9px">Скидка!</span> <?php $percentage = round( ( ( $product->regular_price - $product->sale_price ) / $product->regular_price ) * 100 ); echo $price . sprintf( __('-%s', 'woocommerce' ), $percentage . '%' ); ?></div> </div> </div><!-- end bubble --> <?php endif; ?>
Выводим в шаблоне WC
<?php get_template_part( 'woocommerce/single-product/percentage' ); ?>
Выгода в рублях
Для этого нужно создать файл benefit.php (в директории woocommerce/single-product/) с содержимым:
<?php
/**
* Product sale benefit
*
* @author WooThemes
* @package WooCommerce/Templates
* @version 1.6.4
*/
if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly }
global $post, $product; ?>
<?php if ($product->is_on_sale() && $product->product_type == 'variable') : ?>
<div class="benefit"><div class="inside">
<div class="inside-text">
<?php $available_variations = $product->get_available_variations();
$maximumper = 0;
for ($i = 0; $i < count($available_variations); ++$i) {
$variation_id=$available_variations[$i]['variation_id'];
$variable_product1= new WC_Product_Variation( $variation_id );
$regular_price = $variable_product1 ->regular_price;
$sales_price = $variable_product1 ->sale_price;
$benefit= round(($regular_price - $sales_price),1) ;
if ($benefit > $maximumper) { $maximumper = $benefit;}
}
echo $price . sprintf( __('%s', 'woocommerce' ), $maximumper . 'р.' ); ?>
</div>
</div></div>
<?php elseif($product->is_on_sale() && $product->product_type == 'simple') : ?>
<div class="benefit"><div class="inside">
<div class="inside-text">
<span>Выгода:</span>
<?php $benefit = round( $product->regular_price - $product->sale_price );
echo $price . sprintf( __('%s', 'woocommerce' ), $benefit . 'р.' ); ?>
</div>
</div></div>
<?php endif; ?>
Выводим в шаблоне WC
<?php get_template_part( 'woocommerce/single-product/benefit' ); ?>
Скидка от количества товара
В зависимости от количества покупаемого товара применяется скидка (обновить корзину) от 11 до 22 — 2% от 22 до 52 — 5% более 52 — 10%
//Скидка по количеству товара
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>11 && $value['quantity']<22) {
$discount = $value['data']->price * 0.02;
$value['data']->price = $value['data']->price - $discount;
} elseif ($value['quantity']>22 && $value['quantity']<52) {
$discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
} elseif ($value['quantity']>52) {
$discount = $value['data']->price * 0.10;
$value['data']->price = $value['data']->price - $discount;
}
else { ''; }
}
}
И еще одна найденная функция (-5%), сам еще не проверял:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if ($value['quantity']>0) {
$discount = $value['data']->price * 0.05;
$value['data']->price = $value['data']->price - $discount;
}
}
}
Скидка от суммы заказа
Реализуем данную скидку с помощью купона, для этого создаем «купон» со скидкой в 10% (в настройках woocommerce должны быть активированы купоны).
// Скидка на сумму заказа (с помощью купона)
add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );
function apply_matched_coupons() {
global $woocommerce; $coupon_code = '10_procent_code';
if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;
if ( $woocommerce->cart->cart_contents_total >= 2500 )
{ $woocommerce->cart->add_discount( $coupon_code ); $woocommerce->show_messages(); }
}
Статья содержит материалы сайта: eysman.pro
Еще подобный функционал:
add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );
function apply_matched_coupons() {
global $woocommerce;
// Set your coupon codes
$tri10 = 'tri10';
$tri15 = 'tri15';
$tri20 = 'tri20';
// Get the cart subtotal in non-decimal number format
$cart_subtotal = WC()->cart->subtotal;
// If cart subtotal is less than 400 remove coupons
if ($cart_subtotal < 400) {
if ( $woocommerce->cart->has_discount( $tri10 ) || $woocommerce->cart->has_discount( $tri15 ) || $woocommerce->cart->has_discount( $tri20 ) ) {
WC()->cart->remove_coupon( $tri10 );
WC()->cart->remove_coupon( $tri15 );
WC()->cart->remove_coupon( $tri20 );
}
}
// If cart subtotal is greater 399 AND is less than 600 add or remove coupons
if ($cart_subtotal > 399 && $cart_subtotal < 600 ) {
if ( $woocommerce->cart->has_discount( $tri10 ) ) return;
if ( $woocommerce->cart->has_discount( $tri15 ) || $woocommerce->cart->has_discount( $tri20 ) ) {
WC()->cart->remove_coupon( $tri15 );
WC()->cart->remove_coupon( $tri20 );
}
$woocommerce->cart->add_discount( $tri10 );
}
// If cart subtotal is greater than 599 AND is less than 800 add or remove coupons
if ($cart_subtotal > 599 && $cart_subtotal < 800) {
if ( $woocommerce->cart->has_discount( $tri15 ) ) return;
if ( $woocommerce->cart->has_discount( $tri10 ) || $woocommerce->cart->has_discount( $tri20 ) ) {
WC()->cart->remove_coupon( $tri10 );
WC()->cart->remove_coupon( $tri20 );
}
$woocommerce->cart->add_discount( $tri15 );
}
// If cart subtotal is greater than 799 add or remove coupons
if ( $cart_subtotal > 799) {
if ( $woocommerce->cart->has_discount( $tri20 ) ) return;
if ( $woocommerce->cart->has_discount( $tri10 ) || $woocommerce->cart->has_discount( $tri15 ) ) {
WC()->cart->remove_coupon( $tri10 );
WC()->cart->remove_coupon( $tri15 );
}
$woocommerce->cart->add_discount( $tri20 );
}
}
WooCommerce Bulk Discount (20 000+)
Отличный плагин для реализации системы скидок. Плюсом данного решения является то, что объем товара и скидки можно настроить конкретно для каждого товара. Глобально можно настроить какого характера будет скидка: в рублях, в процентах или фиксированная цена (т.е. если изменить в настройках проценты, то в товарах скидку назначать можно только в процентах).
Для вариаций товара используется общие настройки как для одного товара (это считаю минусом). В настройках можно выставить считать общее количество всех вариаций для скидки или только в рамках одной вариации.
Woo — Dynamic Pricing
Исключительно платное решение, для одного сайта 129$ (04.06.2018), но оно того стоит!
Во первых, есть ряд глобальных настроек: скидки на группы товаров, скидки в зависимости от ролей, а также скидки распространяющиеся на всю категорию (по сути функционал плагина Woo Product Category Discount).
Во вторых, индивидуальные настройки товара. Можно настраивать группы скидок, а в каждой группе правила (от 10, от 30, от 50 и т.д.), причем скидка для каждого товара отдельно может быть в процентах, в рублях, либо фиксированной. Можно прописывать период действия скидок. Для вариаций можно прописать правила отдельно!
Easy WooCommerce Discounts — WooCommerce Dynamic Pricing & Discounts
Отличный плагин не смотря на небольшое количество загрузок — 400 (02.09.2019). Можно конфигурировать различные условия акция, причем довольно легко и понятно.
Спасибо за решение. Давно искал.
Кстати часто что-то ищу и не первый раз нахожу у вас на сайте.
Есть большое пожелание / убрать кастомный скролл с сайта — юзабилити зеро))
Прислушаюсь к Вашему совету. С этим скроллом постоянно какие то проблемы.. А его «крутость» сомнительна. И слышу о неудобстве уже не первый раз. Отключил.
Спасибо за отзыв!