基于产品总数的特定类别折扣

Posted

技术标签:

【中文标题】基于产品总数的特定类别折扣【英文标题】:Discount for Certain Category Based on Total Number of Products 【发布时间】:2017-04-13 18:13:52 【问题描述】:

在 WooCommerce 中,我有一个名为 Samples 的产品类别,每个样品的价格为 2.99 美元。 但我想要一种在将 5 个样品添加到购物车时自动将样品的成本从 2.99 美元更改为 1 美元的方法。

因此,如果将 4 个样品添加到购物车中,则总计为 11.96 美元……但如果添加 5 个,则总计为 5 美元。

因此,对于每 5 件产品,产品价格将从 2.99 美元变为 1 美元,但如果将 6 个样品添加到购物车中,则总计为 7.99 美元,如果添加 10 个,则总计为 10 美元,依此类推...

我怎样才能做到这一点?

谢谢。

【问题讨论】:

您已经告诉我们您需要什么,但您还没有告诉我们您尝试了什么以及什么不起作用。我们能为您提供什么帮助? 【参考方案1】:

更新添加了 Woocommerce 3 兼容性。

这里有一些东西应该可以满足您的要求。 此功能将折扣添加到购物车:

add_action( 'woocommerce_cart_calculate_fees','custom_cart_discount', 20, 1 );
function custom_cart_discount( $cart ) 

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Define HERE your targeted product category (id, slug or name are accepted)
    $category = 'posters';
    // Set the price for Five HERE
    $price_x5 = 5;

    // initializing variables
    $calculated_qty = 0;
    $calculated_total = 0;
    $discount = 0;

    // Iterating through each cart item
    foreach($cart->get_cart() as $cart_item):

        // Make this discount calculations only for products of your targeted category
        if(has_term($category, 'product_cat', $cart_item['product_id'])):
            $item_price = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->price : $cart_item['data']->get_price(); // The price for one (assuming that there is always 2.99)
            $item_qty = $cart_item["quantity"];// Quantity
            $item_line_total = $cart_item["line_total"]; // Item total price (price x quantity)
            $calculated_qty += $item_qty; // ctotal number of items in cart
            $calculated_total += $item_line_total; // calculated total items amount
        endif;
    endforeach;

    // ## CALCULATIONS (updated) ##
    if($calculated_qty >= 5):      
        for($j = 5, $k=0; $j <= $calculated_qty; $j+=5,$k++); // Update $k=0 (instead of $k=1)
        $qty_modulo = $calculated_qty % 5;
        $calculation = ( $k * $price_x5 ) + ($qty_modulo * $item_price);
        $discount -= $calculated_total - $calculation;
    endif;

    // Adding the discount 
    if ($discount != 0)
        $cart->add_fee( __( 'Quantity discount', 'woocommerce' ), $discount, false );
        // Note: Last argument in add_fee() method is related to applying the tax or not to the discount (true or false)

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

当我使用上面的代码时,我在购物车中有 5 个样品,每个产品是 2.99 美元,在小计中总计为 14.95 美元,它应用了“-$4.95”的“数量折扣”,总计到 10 美元。最终总额将是 5 美元而不是 10 美元。

以上是关于基于产品总数的特定类别折扣的主要内容,如果未能解决你的问题,请参考以下文章

从特定类别获取 WooCommerce 产品

在 WooCommerce 产品循环中显示特定类别的产品属性值

如何获取供应商产品所属的所有产品类别

如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品

有没有办法在不为类别制作不同的分页组件的情况下根据特定类别对产品进行计数?

如何从数据库中删除属于特定类别的 woocommerce 产品