Descripció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 es para nuestros desarrolladores revisarla.
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.
/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
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?↑ Volver al principio
Cueros todo, pero free_shippingy local_pickupsi está disponible y es compatible con las zonas de envío.
/**
* Hide shipping rates when free shipping is available, but keep "Local pickup"
* Updated to support WooCommerce 2.6 Shipping Zones
*/
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:
/**
* Hide ALL shipping options when free shipping is available and customer is NOT in certain states
*
* 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 );
/**
* Hide ALL Shipping option when free shipping is available
*
* @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 un complemento 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/
¿Habilitar métodos de envío por clase / producto, pedidos divididos u otros escenarios?
¿Necesitas más flexibilidad? Eche un vistazo a nuestras extensiones de métodos de envío premium .
Fuente:
https://woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
0 Comentarios