Magento 2: приховати інші способи доставки, коли доступна безкоштовна доставка


11

Я стягую з клієнтів фіксовану ставку за доставку, а також пропоную безкоштовну доставку за замовлення, що перевищують певну суму. Наразі клієнтам, які мають право на безкоштовну доставку, також буде показана опція оплати доставки, що може заплутати деяких клієнтів. Хтось знає, чи є спосіб приховати інші способи доставки, коли доступний спосіб безкоштовної доставки?

Відповіді:


6

У мене була така ж проблема.

Видаліть конфігурацію "Безкоштовна доставка", оскільки вона вам не потрібна (у вас уже є "Правила ціни на кошик").

Коли ваш клієнт має право на безкоштовну доставку, це відбувається на основі "Єдиної тарифи", а не в "Безкоштовної доставки".


6

Напишіть плагін, щоб відключити спосіб фіксованої доставки, коли безкоштовна доставка фактично включена на основі підсумкової корзини.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\OfflineShipping\Model\Carrier\Flatrate">
        <plugin name="disable-flatrate" type="Vendor\ModuleName\Model\Carrier\Flatrate" sortOrder="1" />
    </type>
</config>

Напишіть клас Model для обробки підсумкової перевірки.

<?php
namespace Vendor\ModuleName\Model\Carrier;

class Flatrate
{

    const XML_PATH_FREE_SHIPPING_SUBTOTAL = "carriers/freeshipping/free_shipping_subtotal";

    /**
     * @var \Magento\Checkout\Model\Session
     */
    protected $_checkoutSession;

    /**
     * @var \Magento\Framework\App\Config\ScopeConfigInterface
     */
    protected $_scopeConfig;

    public function __construct(
        \Magento\Checkout\Model\Session $checkoutSession,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        \Magento\Store\Model\StoreManagerInterface $storeManager
    ) {
        $this->_storeManager = $storeManager;
        $this->_checkoutSession = $checkoutSession;
        $this->_scopeConfig = $scopeConfig;
    }

    public function afterCollectRates(\Magento\OfflineShipping\Model\Carrier\Flatrate $flatRate, $result)
    {
        $scopeId = $this->_storeManager->getStore()->getId();

        $storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORES;

        // Get MOA value from system configuration.
        $freeShippingSubTotal = $this->_scopeConfig->getValue(self::XML_PATH_FREE_SHIPPING_SUBTOTAL, $storeScope, $scopeId);

        // Get cart subtotal from checkout session.
        $baseSubTotal = $this->_checkoutSession->getQuote()->getBaseSubtotal();

        // Validate subtoal should be empty or Zero.
        if(!empty($baseSubTotal) && !empty($freeShippingSubTotal)) {

            if($baseSubTotal >= $freeShippingSubTotal) {
                return false;
            }
        }

        return $result;
    }
}

1
привіт @maniprakash, де мені потрібно створити di.xml?
Nagaraju K

2
Romba nandri добре працює.
Nagaraju K

1
як приховати способи доставки на основі атрибута товару / кошика?
Nagaraju K

5

Використовуйте розширення ShippingTweaks .


Привіт @vitalli, цей модуль допоможе мені приховати методи доставки на основі мого атрибута товару?
Nagaraju K

1

у відповідь на @Nagaraju та сподіваючись допомогти комусь.

Di.xml можна створити в будь-якому вашому модулі, або якщо ви не знаєте, як і де:

app / code / My_Vendor / MyModule / тощо / di.xml -> ось, де ви ставите код @maniprakash

тоді вам слід створити клас у:

додаток / код / ​​My_Vendor / MyModule / Модель / Flatrate -> та вставте код класу @maniprakash

Просто не забудьте змінити шлях у тег типу на di.xml

<plugin name="disable-flatrate" type="Vendor\ModuleName\Model\Carrier\Flatrate" sortOrder="1" />

шлях повинен відповідати тому, де це ваш клас Model . в моєму прикладі має бути

<plugin name="disable-flatrate" type="My_Vendor\MyModule\Model\Flatrate" sortOrder="1" />

І це все! сподіваюся, що це допоможе! і завдяки @manipakrash, це допомагає мені! =)


0

Приховати безкоштовну доставку під замовлення

Постачальник / magento / Magento_Checkout / шаблон / адреса доставки / доставка-метод-item.html

<!-- ko if: method.carrier_code !== 'freeshipping' -->
<tr class="row"
click="element.selectShippingMethod">
<td class="col col-method">
    <input type="radio"
           class="radio"
           ifnot="method.error_message"
           ko-checked="element.isSelected"
           ko-value="method.carrier_code + '_' + method.method_code"
           attr="'aria-labelledby': 'label_method_' + method.method_code + '_' + method.carrier_code + ' ' + 'label_carrier_' + method.method_code + '_' + method.carrier_code,
                'checked': element.rates().length == 1 || element.isSelected" />
    <span class="label"></span>
</td>
<td class="col col-price">
    <each args="element.getRegion('price')" render="" />
</td>
<td class="col col-carrier"
    attr="'id': 'label_carrier_' + method.method_code + '_' + method.carrier_code"
    text="method.carrier_title" />


0

тощо / di.xml

<type name="Magento\Quote\Model\ShippingMethodManagement">
    <plugin name="vendor_module_plugin_model_quote_shipping_method_management" type="Vendor\Module\Plugin\Model\ShippingMethodManagement"  disabled="false"/>
</type>

Плагін / Модель / ДоставкаMethodManagement.php

public function afterEstimateByAddress($shippingMethodManagement, $output)
{
    return $this->filterOutput($output);
}

public function afterEstimateByExtendedAddress($shippingMethodManagement, $output)
{
    return $this->filterOutput($output);
}

public function afterEstimateByAddressId($shippingMethodManagement, $output)
{
    return $this->filterOutput($output);
}

private function filterOutput($output)
{
    $free = [];
    foreach ($output as $shippingMethod) {
        if ($shippingMethod->getCarrierCode() == 'freeshipping' && $shippingMethod->getMethodCode() == 'freeshipping') {
            $free[] = $shippingMethod;
        }
    }

    if ($free) {
        return $free;
    }
    return $output;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.