Woocommerce 中基于购物车商品数量的条件累进百分比折扣
Conditional progressive percentage discount based on cart item count in Woocommerce
我想根据购物车中的商品数量获得有条件的累进折扣。将 2 件产品添加到购物车后,您将获得折扣。您添加的产品越多,您获得的折扣就越多。
例如:
- 1 件产品 – 全价(无折扣)
- 2 件产品 – 全价加总价 5% 折扣
- 3 件产品 – 全价加总价 10% 的折扣
- 4 件产品 – 全价加总价 15% 的折扣
- 等等……
我在互联网上搜索过,但没有成功。在搜索折扣时,我只是使用了 WooCommerce 优惠券功能,或者我得到了一些旧的错误代码……
有什么想法吗?我该怎么做?
可能吗?
谢谢。
Update - October 2018 (code improved)
是的,可以使用技巧来实现这一目标。通常我们在 WooCommerce 优惠券中使用购物车折扣。这里优惠券不被挪用。我将在这里使用负条件费用,变成折扣。
计算:
— 商品数量基于商品数量和购物车中的商品总数
— 百分比为 0.05 (5%),并且随着每增加一项(如您所问)而增加
— 我们使用折扣小计(以避免添加优惠券造成的多重折叠折扣)
代码:
add_action( 'woocommerce_cart_calculate_fees', 'cart_progressive_discount', 50, 1 );
function cart_progressive_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// For 1 item (quantity 1) we EXIT;
if( $cart->get_cart_contents_count() == 1 )
return;
## ------ Settings below ------- ##
$percent = 5; // Percent rate: Progressive discount by steps of 5%
$max_percentage = 50; // 50% (so for 10 items as 5 x 10 = 50)
$discount_text = __( 'Quantity discount', 'woocommerce' ); // Discount Text
## ----- ----- ----- ----- ----- ##
$cart_items_count = $cart->get_cart_contents_count();
$cart_lines_total = $cart->get_subtotal() - $cart->get_discount_total();
// Dynamic percentage calculation
$percentage = $percent * ($cart_items_count - 1);
// Progressive discount from 5% to 45% (Between 2 and 10 items)
if( $percentage < $max_percentage ) {
$discount_text .= ' (' . $percentage . '%)';
$discount = $cart_lines_total * $percentage / 100;
$cart->add_fee( $discount_text, -$discount );
}
// Fixed discount at 50% (11 items and more)
else {
$discount_text .= ' (' . $max_percentage . '%)';
$discount = $cart_lines_total * $max_percentage / 100;
$cart->add_fee( $discount_text, -$discount );
}
}
代码进入您的活动子主题的 function.php 文件。 已测试并有效。
When using FEE API for discounts (a negative fee), taxes are always applied.
参考文献:
我想根据购物车中的商品数量获得有条件的累进折扣。将 2 件产品添加到购物车后,您将获得折扣。您添加的产品越多,您获得的折扣就越多。
例如:
- 1 件产品 – 全价(无折扣)
- 2 件产品 – 全价加总价 5% 折扣
- 3 件产品 – 全价加总价 10% 的折扣
- 4 件产品 – 全价加总价 15% 的折扣
- 等等……
我在互联网上搜索过,但没有成功。在搜索折扣时,我只是使用了 WooCommerce 优惠券功能,或者我得到了一些旧的错误代码……
有什么想法吗?我该怎么做?
可能吗?
谢谢。
Update - October 2018 (code improved)
是的,可以使用技巧来实现这一目标。通常我们在 WooCommerce 优惠券中使用购物车折扣。这里优惠券不被挪用。我将在这里使用负条件费用,变成折扣。
计算:
— 商品数量基于商品数量和购物车中的商品总数
— 百分比为 0.05 (5%),并且随着每增加一项(如您所问)而增加
— 我们使用折扣小计(以避免添加优惠券造成的多重折叠折扣)
代码:
add_action( 'woocommerce_cart_calculate_fees', 'cart_progressive_discount', 50, 1 );
function cart_progressive_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// For 1 item (quantity 1) we EXIT;
if( $cart->get_cart_contents_count() == 1 )
return;
## ------ Settings below ------- ##
$percent = 5; // Percent rate: Progressive discount by steps of 5%
$max_percentage = 50; // 50% (so for 10 items as 5 x 10 = 50)
$discount_text = __( 'Quantity discount', 'woocommerce' ); // Discount Text
## ----- ----- ----- ----- ----- ##
$cart_items_count = $cart->get_cart_contents_count();
$cart_lines_total = $cart->get_subtotal() - $cart->get_discount_total();
// Dynamic percentage calculation
$percentage = $percent * ($cart_items_count - 1);
// Progressive discount from 5% to 45% (Between 2 and 10 items)
if( $percentage < $max_percentage ) {
$discount_text .= ' (' . $percentage . '%)';
$discount = $cart_lines_total * $percentage / 100;
$cart->add_fee( $discount_text, -$discount );
}
// Fixed discount at 50% (11 items and more)
else {
$discount_text .= ' (' . $max_percentage . '%)';
$discount = $cart_lines_total * $max_percentage / 100;
$cart->add_fee( $discount_text, -$discount );
}
}
代码进入您的活动子主题的 function.php 文件。 已测试并有效。
When using FEE API for discounts (a negative fee), taxes are always applied.
参考文献: