Magento 2: Ẩn các phương thức giao hàng khác khi giao hàng miễn phí có sẵn


11

Tôi tính giá khách hàng của mình cho vận chuyển và tôi cũng cung cấp vận chuyển miễn phí cho các đơn hàng vượt quá số tiền nhất định. Hiện tại, khách hàng đủ điều kiện giao hàng miễn phí cũng sẽ có tùy chọn giao hàng được trả tiền hiển thị, điều này có thể gây nhầm lẫn cho một số khách hàng. Có ai biết nếu có một cách để ẩn các phương thức vận chuyển khác khi phương thức giao hàng miễn phí có sẵn không?

Câu trả lời:


6

Tôi đã từng gặp vấn đề tương tự.

Xóa cấu hình "Giao hàng miễn phí" vì bạn không cần nó (bạn đã có "Quy tắc giá giỏ hàng").

Khi khách hàng của bạn đủ điều kiện giao hàng miễn phí, điều đó xảy ra dựa trên "Tỷ lệ cố định" không phải trong "Giao hàng miễn phí".


6

Viết một plugin để vô hiệu hóa phương thức vận chuyển tốc độ phẳng khi vận chuyển miễn phí thực sự được kích hoạt dựa trên tổng số phụ của giỏ hàng.

<?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>

Viết một lớp Model để xử lý xác nhận tổng phụ.

<?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
xin chào @maniprakash nơi tôi cần tạo di.xml?
Nagaraju K

2
Romba nandri hoạt động tốt.
Nagaraju K

1
Làm thế nào để ẩn phương thức vận chuyển dựa trên thuộc tính sản phẩm / giỏ hàng?
Nagaraju K

5

Sử dụng phần mở rộng ShippingTweaks .


Xin chào @vitalli là mô-đun này sẽ giúp tôi ẩn phương thức vận chuyển dựa trên thuộc tính sản phẩm của tôi?
Nagaraju K

1

để đáp lại @Nagaraju và hy vọng giúp đỡ bất cứ ai.

Có thể tạo tệp di.xml trong bất kỳ mô-đun nào bạn có hoặc nếu bạn không biết cách thức và địa điểm:

app / code / My_Vendor / MyModule / etc / di.xml -> đây là nơi bạn đặt mã của @maniprakash

sau đó bạn nên tạo lớp trong:

ứng dụng / mã / My_Vendor / MyModule / Model / Flatrate -> và dán mã lớp của @maniprakash

Chỉ cần nhớ thay đổi đường dẫn trong thẻ loại trên di.xml

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

đường dẫn phải khớp với vị trí lớp Model của bạn . trong ví dụ của tôi nên

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

VÀ đó là nó! hy vọng nó giúp! và cảm ơn @manipakrash, nó giúp tôi! =)


0

Ẩn vận chuyển miễn phí khi thanh toán

Nhà cung cấp / magento / Magento_Checkout / mẫu / địa chỉ giao hàng / vận chuyển-phương thức-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

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

Plugin / Model / ShippingMethodQuản lý.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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.