Publicado el

Ocultar otros métodos de envío cuando esté disponible «Envío gratuito»

envío gratuito

Visión general

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.

Si desea ver esta función agregada al núcleo de WooCommerce, visite nuestro Panel de ideas y agregue su voto. Cuanto más popular se vuelve una idea, más prioridad tienen nuestros desarrolladores para revisar.

Agregar código

Antes de agregar fragmentos, borre su caché de WooCommerce. Vaya a  WooCommerce> Estado del sistema> Herramientas> Transitorios de WooCommerce> Transitorios claros

Agregue este código al functions.phparchivo del tema de su hijo o mediante un complemento que permita agregar funciones personalizadas, como el complemento Fragmentos de código . No agregue código personalizado directamente al functions.phparchivo de su tema principal, ya que se borrará por completo cuando actualice el tema.

Fragmento de PHP

¿Cómo muestro solo envío gratuito?

Oculta todo, pero free_shippingsi está disponible y es compatible con las zonas de envío.

// Ocultar otros métodos de envío cuando el envío gratuito está disponible.
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 );

¿Cómo muestro solo recogida local y envío gratuito?

Oculta todo menos free_shippinglocal_pickupsi está disponible y es compatible con zonas de envío.

/**
 * Ocultar tarifas de envío cuando el envío gratuito está disponible, pero mantener "Recogida local" 
 * Actualizado para admitir zonas de envío de WooCommerce 2.6
 */

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 …

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:

/**
 * Ocultar TODAS las opciones de envío cuando el envío gratuito está disponible y el cliente NO se encuentra en ciertos estados 
 * 
 * Cambiar $ excluded_states = array ('AK', 'HI', 'GU', 'PR'); para incluir todos los estados que NO tienen envío gratuito
 */
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 );
 
		// Add Free Shipping back into $avaialble_methods
		$rates = array();
		$rates[] = $freeshipping;
 
	endif;
 
	if( isset( $rates['free_shipping'] ) AND in_array( WC()->customer->shipping_state, $excluded_states ) ) {
 
		// remove free shipping option
		unset( $rates['free_shipping'] );
 
	}

	return $rates;
}

¿Hay algún Plugin disponible para esto?

Sí, también puede usar este complemento gratuito en lugar de los dos primeros fragmentos: https://wordpress.org/plugins/wc-hide-shipping-methods

Deseo guardar o compartir en mis redes: