Cuando el cliente va a terminar una compra en nuestra tienda online, por defecto siempre tendrá marcada una opción por primera vez, en este caso es la primera que está en la lista para ese país, ciudad o código postal que tenemos configurado:

El orden, lo podremos modificar pasando el ratón por las 3 líneas del menú. ¿Pero y si hay un plugin instalado que no depende de este orden? Muchos transportistas tienen su propio plugin impidiendo que se pueda ordenar así.
En este tutorial vamos a ver cómo hacer esto por código y quitar la selección automática.
Modificar el orden por defecto
Si lo queremos modificar el orden de todos los transportistas, usaremos el siguiente código poniendo los transportistas que nos interesan:
add_filter('woocommerce_package_rates', 'dl_sort_shipping_methods', 10, 2);
function dl_sort_shipping_methods($available_shipping_methods, $package)
{
// Pon aqui el orden de los metodos de envio
$sort_order = array(
'mrw' => array(),
'free_shipping' => array(),
'local_pickup' => array(),
);
foreach($available_shipping_methods as $carrier_id => $carrier){
$carrier_name = current(explode(":",$carrier_id));
if(array_key_exists($carrier_name,$sort_order)){
$sort_order[$carrier_name][$carrier_id] = $available_shipping_methods[$carrier_id];
unset($available_shipping_methods[$carrier_id]);
}
}
// añadiendo métodos de nuevo según el orden de marcado
foreach($sort_order as $carriers){
$available_shipping_methods = array_merge($available_shipping_methods,$carriers);
}
return $available_shipping_methods;
}
En este caso el orden sería:
- MRW
- Envío gratis
- Recogida en tienda
Puedes usar el comando value para poner tus otros métodos de envío.
Quitar el método de envío por defecto en WooCommerce
Pero… y si queremos que el cliente sea libre de elegir la primera vez, es decir, que ningún campo esté marcado por defecto y sea el quien tenga que elegir?
Para ello insertaremos este código en nuestro functions.php de nuestro tema hijo o bien nuestro plugin Code Snippets como lo explico aquí.
add_filter( 'woocommerce_shipping_chosen_method', '__return_false', 99);
Con esto obtendremos el siguiente resultado de quién realice su compra por primera vez:

Si quieres hacer otras acciones en los envíos de WooCommerce tienes también estos tutoriales:
- Tutorial de configuración de envíos
- Correos de seguimiento WooCommerce
- Excluir métodos de envío condicionalmente
- Mostrar un mensaje al seleccionar una forma de envío
Cualquier duda como siempre en comentarios!
Buenos días Diego,
Gracias por el aporte!!
¿Cómo puedo forzar un método de envío por defecto?
En mi caso tengo instalado un plugin de transportista y utilizo únicamente la opción de «recogida en tienda» de Woocommerce y el «envio a domicilio» del transportista.
Siempre me sale por defecto marcada la opción de recogida en tienda y me gustaría que lo opción marcada por defecto fuese la del envío a domicilio.
No se si me he explicado bien.
Gracias.
Un saludo.