Como entendí por su pregunta es que siempre desea tener un método de envío seleccionado cuando alguien entra en la página de pago.
Para lograr esto, necesitamos anular un javascript del módulo Magento_Checkout.
Primero lo primero, necesitamos crear un módulo:
Espacio de nombres / Módulo / registro.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Espacio de nombres / Módulo / 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>
Después de esto, necesitamos crear los requirejs para anular ese js.
Espacio de nombres / Módulo / vista / frontend / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Ahora tenemos que copiar checkout-data-resolver.js
desde Magento_Checkout/view/frontend/web/js/model
nuestro módulo con la misma rutaNamespace_Module/view/frontend/web/js/model
Después de eso, necesitamos cambiar una condición dentro de la función resolveShippingRates: function (ratesData)
Desde:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
A:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Y eso es todo, todo lo que tienes que hacer ahora es:
- Active el módulo: módulo php bin / magento: enable Namespace_Module
- Ejecute una actualización de configuración: configuración de php bin / magento: actualización
- Haga una implementación estática: configuración de php bin / magento: contenido estático: implementación