Para ocultar otros gastos de envío cuando se muestra el envío gratuito en Woocommerce excepto cuando exista Coste de la clase de envío mediante una función PHP, puedes utilizar el siguiente código:
add_filter( 'woocommerce_package_rates', 'mostrar_solo_envio_gratuito', 10, 2 ); function mostrar_solo_envio_gratuito( $rates, $package ) { // Obtener el costo del envío gratuito $envio_gratuito = false; foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id ) { $envio_gratuito = true; break; } } // Si no hay envío gratuito, retornar las tarifas normales if ( ! $envio_gratuito ) { return $rates; } // Encontrar la clase de envío actual $clase_envio_actual = ''; foreach ( $package['contents'] as $item ) { $clase_envio_actual = $item['data']->get_shipping_class(); if ( ! empty( $clase_envio_actual ) ) { break; } } // Si no hay clase de envío, retornar las tarifas normales if ( empty( $clase_envio_actual ) ) { return $rates; } // Verificar si la clase de envío actual tiene un costo $costo_clase_envio_actual = false; foreach ( $rates as $rate_id => $rate ) { if ( $clase_envio_actual === $rate->get_meta( 'shipping_class' ) && $rate->cost > 0 ) { $costo_clase_envio_actual = true; break; } } // Si hay un costo para la clase de envío actual, mostrar todas las tarifas if ( $costo_clase_envio_actual ) { return $rates; } // Si no hay costo para la clase de envío actual, ocultar todas las tarifas excepto el envío gratuito foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' !== $rate->method_id ) { unset( $rates[ $rate_id ] ); } } return $rates; }
Este código añade un filtro a la lista de tarifas de envío que se muestran en el checkout de Woocommerce. La función verifica si hay una tarifa de envío gratuito, y si es así, busca la clase de envío actual y comprueba si tiene un costo asociado. Si la clase de envío actual tiene un costo, se muestran todas las tarifas de envío. De lo contrario, se ocultan todas las tarifas excepto la tarifa de envío gratuito.
Ten en cuenta que para que este código funcione correctamente, debes haber configurado previamente el envío gratuito y las clases de envío en Woocommerce. Además, debes agregar este código a tu archivo functions.php o a un plugin personalizado en tu sitio web de WordPress.