Si el envío gratuito está disponible, posiblemente no desee mostrar las otras opciones de envío premium. WooCommerce muestra por defecto todas las tarifas de envío que coinciden con una zona de envío dada, por lo que no es posible lograr esto solo desde la configuración.
Afortunadamente, el «WooCommerce_Package_RatesEl filtro nos permite manipular las tarifas de envío antes de que sean devueltos a la frontend. En este ejemplo, deshabilitaremos todos los métodos de envío pero «envío gratuito» para que el envío gratuito siga siendo la única opción posible.
Aquí está el código para agregar a sus funciones.php. ¡Disfrutar!
Php Snippet #1: Tasa de envío específica no establecida cuando la tarifa de envío gratuita está disponible
/** n*@snippet Hide one shipping rate when Free Shipping is available n*@how-to https://tdestudiodesign.com/tutoriales n*@author Tomás Lucas D´Amario, TD Estudio Design n*@compatible WooCommerce 6 n*@community https://tdestudiodesign.com/club */ add_filter( 'woocommerce_package_rates', 'tddesign_unset_shipping_when_free_is_available_in_zone', 9999, 2 ); function tddesign_unset_shipping_when_free_is_available_in_zone( $rates, $package ) { // Only unset rates if free_shipping is available if ( isset( $rates['free_shipping:8'] ) ) { unset( $rates['flat_rate:1'] ); } return $rates;}
Php Snippet #2: Unset todas las tarifas de envío en todas las zonas cuando hay una tarifa de envío gratuita disponible
/** n*@snippet Hide ALL shipping rates in ALL zones when Free Shipping is available n*@how-to https://tdestudiodesign.com/tutoriales n*@author Tomás Lucas D´Amario, TD Estudio Design n*@compatible WooCommerce 6 n*@community https://tdestudiodesign.com/club */ add_filter( 'woocommerce_package_rates', 'tddesign_unset_shipping_when_free_is_available_all_zones', 9999, 2 ); function tddesign_unset_shipping_when_free_is_available_all_zones( $rates, $package ) { $all_free_rates = array(); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id ) { $all_free_rates[ $rate_id ] = $rate; break; } } if ( empty( $all_free_rates )) { return $rates; } else { return $all_free_rates; } }
¿Las tarifas de envío no se esconden después de implementar estos fragmentos?
Probablemente necesite:
a) Vacío del carrito y comience a probar de nuevo
b) sesiones claras de clientes:
¿Dónde agregar código personalizado?
Debes colocar PHP personalizado en funciones.php y CSS personalizado en style.css del tema de su hijo: ¿Dónde colocar la personalización de WooCommerce?
Este código todavía funciona, a menos que informe lo contrario. Para excluir los conflictos, cambie temporalmente al tema de la tienda, deshabilite todos los complementos, excepto WooCommerce, y pruebe el fragmento nuevamente: Solución de problemas de WooCommerce 101
Contenido relacionado
Tomás Lucas D´Amario
Programador y Desarrollador
Experto en WooCommerce y WordPress. Trabajando como un profesional independiente de WooCommerce desde 2016. Su objetivo es ayudar a los empresarios y desarrolladores a superar sus pesadillas de WooCommerce. Sigueme o contactame por Linkedin