Magento 2 - 有没有办法为特定产品SKU设置免费的购物车价格规则?

时间:2017-02-07 18:26:04

标签: magento magento2 shipping

我记得在Magento 1.9中曾经有一种方法可以根据产品SKU设置购物车规则。但是,由于某种原因,我能够在Magento 2上找到该选项。

我错过了什么或Magento 2改变了他们做事的方式吗?

2 个答案:

答案 0 :(得分:0)

在magento 2中,您可以从这里购物车价格规则。

Marketing -> Cart Price Rules

您可以根据产品SKU进行设置。

  1. 您需要在条件部分选择"Product attribute combination"。喜欢屏幕排序。 enter image description here

  2. 现在接着显示不同的产品属性,您需要从中选择SKU。喜欢屏幕排序。 enter image description here

答案 1 :(得分:0)

Magento 2中的另一个巧妙的解决方案是允许恕我直言提供更大的灵活性,是免费的先进航运延期(由owebia提供)。所有语法都在admin后端输入。不试图在这里做广告,但这只是解决了问题,而且这是一个免费且相当直接的解决方案。

回答这个问题:这是一个为一个特定SKU创建免费送货规则的解决方案:

addMethod('id_001', [
    'title'      => "Free Shipping for Product SKU 998877 ONLY",
    'enabled'    => array_sum(
                        array_map(
                            function ($item) {
                                return substr($item->product->sku, 0, 6) == '998877';
                            },
                            $request->all_items
                        )
                    ) > 0
                    &&
                    array_sum(
                        array_map(
                            function ($item) {
                                return substr($item->product->sku, 0, 6) != '998877';
                            },
                            $request->all_items
                        )
                    ) <= 0,
    'price'      => 0,
]);

这也适用于更多SKU或各种产品类别。

您基本上可以提出其他规则,例如所有商品的免费送货,但是对于包含某些大件商品的订单,小计必须超过300美元。

如果您想要将某些大件产品从免费送货中排除,可能会有其他用途。以下是我必须处理的一个例子:

所有订单免费送货超过100美元,除非这些订单包含大件商品998877。

addMethod('id_001', [
    'title'      => "Free Shipping on Orders which DO NOT contain product SKU 998877",
    'enabled'    => $quote->subtotal >= 100.00
                    &&
                    array_sum(
                        array_map(
                            function ($item) {
                                return substr($item->product->sku, 0, 6) == '998877';
                            },
                            $request->all_items
                        )
                    ) <= 0,
    'price'      => 0,
]);