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 / etc / di.xml -> นี่คือที่ที่คุณใส่รหัสของ @maniprakash

จากนั้นคุณควรสร้างชั้นเรียนใน:

แอพ / รหัส / My_Vendor / MyModule / รุ่น / Flatrate -> และวางรหัสคลาสของ @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_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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.