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.
RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…
WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…
Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…
Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…
De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…
Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…