Cuando estás creando una tienda para un cliente con WooCommerc, o cuando damos asesoría para cuestiones técnicas sobre el tema, es bastante frecuente que surja la siguiente pregunta: ¿por qué si hay envío gratuito me deja escoger otros métodos de envío? Y es que por defecto, WooCommerce te deja crear un envío gratuito de forma sencilla, pero cuando se activa porque se cumplen las condiciones, no oculta los otros métodos así que tenemos el absurdo de que junto con el envío gratuito aparecen otros métodos. Y claro, para un cliente, es además de confuso, señal de que la web no está «acabada» porque es lo típico que nunca debería pasar.
Ya hablaremos otro día largo y tendido del envío gratuito en WooCommerce, pero la idea de esta entrada no es entrar en eso, sino explicaros la parte técnica: el cómo se oculta el resto de envíos.
Así que bueno, os dejo el código y ahora como siempre lo comentamos. Podéis incluirlo en el functions.php de vuestro tema hijo, en cualquier otro fichero que llaméis desde él o en vuestro plugin de funciones.
function cod_ocultar_otros_envios_menos_gratuito( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'cod_ocultar_otros_envios_menos_gratuito', 100 );
Este pequeño trozo de código está indicado en la documentación oficial de WooCommerce, así que a lo mejor ya lo conocéis. Pero bueno, lo importante no es tanto copiarlo y pegarlo como un papagallo sino entender qué hace y adaptarlo.
Al terminar tenemos dos casos diferenciados:
Esto es lo que se hace en la última línea pero el operador ternario hace que sea un poco más abstracto, dicho de otra forma sería así:
return ! empty( $free ) ? $free : $rates; /* es lo mismo que */if( !empty( $free ) ) return $free; else return $rates;
El resultado obtenido es justo el que queremos: si no está el método gratuito el código no afecta para nada, pero si está, el código creará una colección nueva que devolver a WooCommerce sólo con ese método, y así el usuario sólo verá disponible el envío gratis y con eso, se habrá acabado nuestro problema.
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.
Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…
Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…
¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…
Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…
Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…
Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…