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!

Elimine una tarifa plana determinada cuando el envío gratuito está disponible en carrito / pago de WooCommerce

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:

Sesiones de clientes claras: herramientas de estado del sistema de WooCommerce

¿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