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>

उप कुल सत्यापन की प्रक्रिया के लिए एक मॉडल वर्ग लिखें।

<?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
hi @maniprakash जहाँ मुझे di.xml बनाने की आवश्यकता है?
नागराजू के

2
रोम्बा नंद्री ने अपना काम ठीक किया।
नागराजू के

1
उत्पाद / कार्ट आइटम विशेषता के आधार पर शिपिंग विधियों को कैसे छिपाया जाए?
नागराजू के

5

विस्तार का उपयोग करें नौवहन


हाय @vitalli है यह मॉड्यूल मुझे मेरे उत्पाद विशेषता के आधार पर शिपिंग विधियों को छिपाने में मदद करेगा?
नागराजू के

1

@ नागराजु के जवाब में और किसी से भी मदद की उम्मीद करना।

Di.xml को आपके किसी भी मॉड्यूल में बनाया जा सकता है, या यदि आप नहीं जानते कि कैसे और कहां:

app / code / My_Vendor / MyModule / etc / di.xml -> यहाँ आप @maniprakash का कोड डालेंगे

तो आप में वर्ग बनाना चाहिए:

ऐप / कोड / My_Vendor / MyModule / मॉडल / फ्लैट्रेट -> और @maniprakash का वर्ग कोड पेस्ट करें

बस di.xml पर टाइप टैग में पथ बदलने के लिए याद रखें

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

पथ से मेल खाना चाहिए जहां आपका मॉडल वर्ग है । मेरे उदाहरण में होना चाहिए

<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

etc / 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>

प्लगइन / मॉडल / ShippingMethodManagement.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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.