De forma predeterminada, WooCommerce mostrará todos los métodos de envío que coinciden con el cliente y el contenido del carrito. Esto significa que el envío gratuito también se mostrará junto con la tarifa plana y otros métodos de envío. La funcionalidad para ocultar todos los demás métodos y solo mostrar envío gratuito requiere un código PHP personalizado o un complemento / extensión / plugin.
Antes de agregar fragmentos, borra la caché de WooCommerce.
Accede a WooCommerce -> Estado del sistema -> Herramientas -> Datos temporales de WooCommerce -> Borrar datos temporales
Añade este código al archivo functions.php del tema hijo, hay que recordar que si se agrega directamente en el tema padre una vez se actualice el tema se eliminará dicho código, o mediante un complemento que permite agregar funciones personalizadas como el complemento de code snippets.
Podremos ubicar el archivo functions.php accediendo wePanel – > Administrador de archivos -> Public_html -> Dominio -> Wp-content -> Themes > Tu_plantilla Archivo functions.php
Añade el siguiente fragmento de código PHP al final del archivo, para realizar las determinadas acciones:
Tabla de contenidos
Mostrar únicamente envío gratuito:
Oculta todo, pero free_shipping si está disponible y es compatible con las zonas de envío.
/** * Mostrar únicamente envío gratuito. */ function my_hide_shipping_when_free_is_available( $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', 'my_hide_shipping_when_free_is_available', 100 );
Mostrar recogida local y envio gratuito:
Ocultar todo menos free_shipping y local_pickup si está disponible y es compatible con las zonas de envío.
/** * mostrar recogida local y envio gratuito */ function hide_shipping_when_free_is_available( $rates, $package ) { $new_rates = array(); foreach ( $rates as $rate_id => $rate ) { // Only modify rates if free_shipping is present. if ( 'free_shipping' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } if ( ! empty( $new_rates ) ) { //Save local pickup if it's present. foreach ( $rates as $rate_id => $rate ) { if ('local_pickup' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } return $new_rates; } return $rates; } add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
Mostrar solo envío gratuito en todos los estados excepto el que seleccionemos:
Mostrar solo envío gratuito en todos los estados excepto en la lista de exclusión. Ocultar el envío gratuito si el cliente se encuentra en uno de los estados enumerados.
/** * Mostrar solo envío gratuito en todos los estados excepto en los que seleccionemos */ function hide_shipping_when_free_is_available( $rates, $package ) { $new_rates = array(); foreach ( $rates as $rate_id => $rate ) { // Only modify rates if free_shipping is present. if ( 'free_shipping' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } if ( ! empty( $new_rates ) ) { foreach ( $rates as $rate_id => $rate ) { if ('local_pickup' === $rate->method_id ) { $new_rates[ $rate_id ] = $rate; break; } } return $new_rates; } return $rates; } add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
Mostrar solo envío gratuito en todos los estados excepto los seleccionados:
Mostrar solo envío gratuito en todos los estados excepto en la lista de exclusión con lo que se oculta el envío gratuito si el cliente se encuentra en uno de los estados enumerados
/** * ocultar únicamente para los estados seleccionados * * Change $excluded_states = array( 'AK','HI','GU','PR' ); to include all the states that DO NOT have free shipping */ add_filter( 'woocommerce_package_rates', 'hide_all_shipping_when_free_is_available' , 10, 2 ); /** * Ocultar TODAS las opciones de envío cuando el envío gratuito está disponible * * @param array $available_methods */ function hide_all_shipping_when_free_is_available( $rates, $package ) { $excluded_states = array( 'AK','HI','GU','PR' ); if( isset( $rates['free_shipping'] ) AND !in_array( WC()->customer->shipping_state, $excluded_states ) ) : // Get Free Shipping array into a new array $freeshipping = array(); $freeshipping = $rates['free_shipping']; // Empty the $available_methods array unset( $rates ); // agregar envio gratis en $avaialble_methods $rates = array(); $rates[] = $freeshipping; endif; if( isset( $rates['free_shipping'] ) AND in_array( WC()->customer->shipping_state, $excluded_states ) ) { // remover opcion de envio gratuito unset( $rates['free_shipping'] ); } return $rates; }
¿Te ha resultado útil este artículo?
Equipo de soporte WordPress y WooCommerce en Webempresa.