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
selectShippingMethodAction(ratesData[0]);
Modifiqué esto y agregué la llamada para bajar un poco más abajo en el método, después de que busca los métodos ya seleccionados, para que no los anule.Esto hará que sea imposible seleccionar cualquier otra opción de envío. Esto resuelve el problema para mí:
fuente
No es necesario que todo el módulo logre este cambio. Simplemente puede extender el módulo Checkout y anular en su tema.
Copiar el archivo js checkout-Data-resolver.js
a partir
vendor\magento\module-checkout\view\frontend\web\js\model
de
la aplicación \ diseño \ frontend \ Espacio de nombres \ THEMENAME \ Magento_Checkout \ web \ js \ modelo.
Localice la línea con el siguiente código:
if (ratesData.length == 1) {
y reemplácela con:
if (ratesData.length >= 1 && !selectedShippingRate) {
fuente
Lo que probablemente quiera hacer es seleccionar el método de envío más barato de forma predeterminada.
En su módulo over ride checkout-data-resolver, opcionalmente puede usar un mixin en su lugar.
en el método resolveShippingRates, modifique de la siguiente manera:
fuente
Si bien los métodos anteriores sugieren anular las funciones js, recomendaría usar mixins para evitar conflictos de código innecesarios:
En su interfaz requirejs-config.js agregue lo siguiente:
En su checkout-data-resolver.js
Alternativamente, puede descargar el módulo aquí que le permite seleccionar un método de envío y pago predeterminado : Método de envío y pago predeterminado [M2]
fuente
Cualquiera que esté usando onestepcheckout puede intentar esto:
Sé que parece estúpido, pero por alguna razón, agregar ese retraso realmente funcionó para mí. El costo de envío se está actualizando así.
fuente