Last active
November 11, 2023 20:47
-
-
Save mksddn/621c8b6ccc8e3ca9e32eb8330f5eed26 to your computer and use it in GitHub Desktop.
WooCommerce - Depending discount for entire cart
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Фиксированная скидка в процентах на всю корзину | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% ', -$discount); | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
// Фиксированная (применяющаяся при наличии в корзине конкретных товаров) скидка в процентах на всю корзину | |
# при наличии конкретного товара в корзине | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$array_product_id = []; | |
foreach ($cart->get_cart() as $cart_item) { | |
$array_product_id[] = $cart_item['product_id']; | |
} | |
if (in_array(6, $array_product_id)) { // Если в корзине есть товар с ID = 6 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор акционного товара ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при наличии одного из товаров в корзине | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$array_product_id = []; | |
foreach ($cart->get_cart() as $cart_item) { | |
$array_product_id[] = $cart_item['product_id']; | |
} | |
if (in_array(6, $array_product_id) || in_array(7, $array_product_id)) { // Если в корзине есть товар с ID = 6 или ID = 7 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор акционного товара ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при наличии конкретных товаров в корзине | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$array_product_id = []; | |
foreach ($cart->get_cart() as $cart_item) { | |
$array_product_id[] = $cart_item['product_id']; | |
} | |
if (in_array(6, $array_product_id) && in_array(7, $array_product_id)) { // Если в корзине есть товары с ID = 6 и ID = 7 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор акционных товаров ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
// Фиксированная (применяющаяся при наличии в корзине товаров из конкретных категорий) скидка в процентах на всю корзину | |
# при наличии товара в корзине из конкретной категории | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
foreach ($cart->get_cart() as $cart_item) { | |
if (has_term(16, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционной категории ', -$discount); | |
break; | |
} | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при наличии товара в корзине из одной категории | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
foreach ($cart->get_cart() as $cart_item) { | |
if (has_term([16, 23], 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 или ID = 23 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционной категории ', -$discount); | |
break; | |
} | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при наличии товара в корзине из конкретных категорий | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
foreach ($cart->get_cart() as $cart_item) { | |
if (has_term(16, 'product_cat', $cart_item['product_id']) && has_term(23, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 и ID = 23 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор товара из акционных категорий ', -$discount); | |
break; | |
} | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при наличии товаров в корзине из конкретных категорий | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$one_category = false; // Товар из первой категории | |
$two_category = false; // Товар из второй категории | |
foreach ($cart->get_cart() as $cart_item) { | |
if (has_term(16, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 16 | |
$one_category = true; | |
} | |
if (has_term(23, 'product_cat', $cart_item['product_id'])) { // Если в корзине есть товар из категории с ID = 23 | |
$two_category = true; | |
} | |
} | |
if ($one_category && $two_category) { // Если в корзине есть товары из категорий с ID = 16 и ID = 23 | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбор товаров из акционных категорий ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
// Фиксированная (применяющаяся в зависимости от выбранного способа доставки) скидка в процентах на всю корзину | |
# при выборе конкретного способа доставки | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
global $woocommerce; | |
$delivery_name = ''; | |
$delivery_selected = []; | |
$available_methods = $woocommerce->shipping->get_packages(); | |
if (isset($woocommerce->session)) { | |
$delivery_selected = $woocommerce->session->get('chosen_shipping_methods'); | |
} | |
foreach ($available_methods as $method) { | |
foreach ($delivery_selected as $delivery) { | |
if (isset($method['rates'][$delivery])) { | |
$delivery_name = $method['rates'][$delivery]->label; | |
break; | |
} | |
} | |
} | |
if ($delivery_name == 'Самовывоз') { | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за самовывоз ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
# при выборе одного из заданных способов доставки | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
global $woocommerce; | |
$delivery_name = ''; | |
$delivery_selected = []; | |
$available_methods = $woocommerce->shipping->get_packages(); | |
if (isset($woocommerce->session)) { | |
$delivery_selected = $woocommerce->session->get('chosen_shipping_methods'); | |
} | |
foreach ($available_methods as $method) { | |
foreach ($delivery_selected as $delivery) { | |
if (isset($method['rates'][$delivery])) { | |
$delivery_name = $method['rates'][$delivery]->label; | |
break; | |
} | |
} | |
} | |
if ($delivery_name == 'Самовывоз' || $delivery_name == 'СДЭК') { | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Фиксированная скидка в 5% за выбранный способ доставки ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
// Динамичная (изменяющаяся в зависимости от итоговой суммы) скидка в процентах на всю корзину | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$woo_current_price = $cart->subtotal; // Текущая итоговая сумма | |
if ($woo_current_price >= 1000 && $woo_current_price <= 10000) { | |
$discount = $cart->subtotal * 0.03; // 0.03 - это 3% | |
$cart->add_fee('Скидка в 3% за заказ на сумму от 1 000 до 10 000 рублей ', -$discount); | |
} elseif ($woo_current_price > 10000) { | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Скидка в 5% за заказ на сумму более 10 000 рублей ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); | |
// Динамичная (изменяющаяся в зависимости от итогового количества товаров) скидка в процентах на всю корзину | |
function woo_discount_total(WC_Cart $cart) | |
{ | |
if (is_admin() && !defined('DOING_AJAX')) { | |
return; | |
} | |
$woo_count_item = $cart->get_cart_contents_count(); // Количество товаров в корзине | |
if ($woo_count_item >= 10 && $woo_count_item <= 50) { | |
$discount = $cart->subtotal * 0.03; // 0.03 - это 3% | |
$cart->add_fee('Скидка в 3% за заказ включающий в себя от 10 до 50 товаров ', -$discount); | |
} elseif ($woo_count_item > 50) { | |
$discount = $cart->subtotal * 0.05; // 0.05 - это 5% | |
$cart->add_fee('Скидка в 5% за заказ включающий в себя более 50 товаров ', -$discount); | |
} | |
} | |
add_action('woocommerce_cart_calculate_fees', 'woo_discount_total'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment