Другой изящное решение в Magento 2, которая позволяет ИМХО для большей гибкости является свободным расширенный доставка расширение (по owebia). Весь синтаксис вводится в бэкэнд администратора. Не пытайтесь рекламировать здесь, но это просто решает вопрос, и это бесплатное и довольно прямое решение.
Чтобы ответить на вопрос: Вот решение создать свободное правило доставки для одного конкретного 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,
]);
Это также работает для более артикулов или различных категорий товаров.
Вы можете в принципе придумать другие правила, такие как бесплатная доставка для всех товаров, однако при заказе, содержащем определенный объемный товар, суммарный итог должен быть более 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,
]);