Escreva um plug-in para desativar o método de envio fixo quando o envio gratuito estiver realmente ativado com base no sub total do carrinho.
<? 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>
Escreva uma classe Model para processar a validação subtotal.
<? 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 ;
}
}
Maniprakash Chinnasamy
fonte
Use a extensão ShippingTweaks .
fonte
em resposta a @Nagaraju e na esperança de ajudar alguém.
O di.xml pode ser criado em qualquer módulo que você possua ou se não souber como e onde:
app / code / My_Vendor / MyModule / etc / di.xml -> aqui é onde você coloca o código de @maniprakash
então você deve criar a classe em:
app / code / My_Vendor / MyModule / Model / Flatrate -> e cole o código da classe @maniprakash
Lembre-se de alterar o caminho na tag type no di.xml
o caminho deve corresponder onde está a sua classe Model . no meu exemplo deve ser
E é isso! espero que ajude! e graças a @manipakrash, isso me ajuda! =)
fonte
Ocultar frete grátis na finalização da compra
Fornecedor / magento / Magento_Checkout / template / endereço de entrega / método de envio item.html
fonte
etc / di.xml
Plugin / Modelo / ShippingMethodManagement.php
fonte