在WooCommerce中,我想在不使用优惠券的情况下进行折扣,折扣计算将基于产品价格,例如"以3的价格购买3个产品。
在我的有效主题的 function.php
中,我正在使用此代码:
function promo () {
if (is_cart()) {
$woocommerce->cart->add_fee( __('des', 'woocommerce'), -50.00`enter code here`, true, '');
}
}
add_action ('woocommerce_cart_calculate_fees', 'promo');
我的问题:此代码在结帐页面上无效 如果我强制执行审核订单,则会显示折扣,但总价值不会发生变化。我认为它不会节省费用。
如何使其发挥作用(在结帐页面上)?
由于
答案 0 :(得分:2)
这个钩子是为购物车费(或折扣),所以你必须删除
if (is_cart()) {
条件,这就是为什么它不起作用......
这是正确的功能代码,以实现"买2拍3"折扣,将根据订单项数量进行折扣:
add_action('woocommerce_cart_calculate_fees' , 'discount_2_for_3', 10, 1);
function discount_2_for_3( $cart_object ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Initialising variable
$discount = 0;
// Iterating through cart items
foreach( $cart_object->get_cart() as $cart_item ){
// Getting item data from cart object
$item_id = $cart_item['product_id']; // Item Id or product ID
$item_qty = $cart_item['quantity']; // Item Quantity
$product_price = $cart_item['data']->price; // Product price
$line_total = $cart_item['line_total']; // Price x Quantity total line item
// THE DISCOUNT CALCULATION
if($item_qty >= 3){
// For each item quantity step of 3 we add 1 to $qty_discount
for($qty_x3 = 3, $qty_discount = 0; $qty_x3 <= $item_qty; $qty_x3 += 3, $qty_discount++);
$discount -= $qty_discount * $product_price;
}
}
// Applied discount "2 for 3"
if( $discount != 0 ){
// Note: Last argument is related to applying the tax (false by default)
$cart_object->add_fee( __('Des 2 for 3', 'woocommerce'), $discount, false);
}
}
这适用于简单的产品,但不适用于产品变化......
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
代码经过测试并有效。