Como entendi da sua pergunta, você deseja sempre ter um método de envio selecionado quando alguém entrar na página de checkout.
Para conseguir isso, precisamos substituir um javascript do módulo Magento_Checkout.
Primeiramente, precisamos criar um módulo:
Namespace / Module / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Namespace / Module / etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Namespace_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Depois disso, precisamos criar os requirejs para substituir esses js.
Namespace / Module / view / frontend / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Agora temos que copiar checkout-data-resolver.js
a partir Magento_Checkout/view/frontend/web/js/model
do nosso módulo com o mesmo caminhoNamespace_Module/view/frontend/web/js/model
Depois disso, precisamos alterar uma condição dentro da função resolveShippingRates: function (ratesData)
De:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Para:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
E é isso, tudo o que você precisa fazer agora é:
- Ative o módulo: php bin / magento module: enable Namespace_Module
- Execute uma atualização de instalação: php bin / magento setup: upgrade
- Faça uma implementação estática: php bin / magento setup: static-content: deploy