]Quando si abilita la spedizione gratuita dopo un determinato prezzo, ci si scontra spesso col problema, per chi acquista, di dover flaggare manualmente la spedizione gratuita.
Nasconde tutto tranne che free_shipping se è disponibile ed è compatibile con le zone di spedizione.
Il codice relativo alla tua versione di Woocommerce deve essere aggiunto al file functions.php del tema o tema child.
/** | |
* 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 ); |
Questo può essere fatto utilizzando un plugin gratuito https://wordpress.org/plugins/wc-hide-shipping-methods/ .
Si Può anche mostrare solo il free shipping.
/** | |
* woocommerce_package_rates is a 2.1+ hook | |
*/ | |
add_filter( ‘woocommerce_package_rates’, ‘hide_shipping_when_free_is_available’, 10, 2 ); | |
/** | |
* Hide shipping rates when free shipping is available | |
* | |
* @param array $rates Array of rates found for the package | |
* @param array $package The package array/object being shipped | |
* @return array of modified rates | |
*/ | |
function hide_shipping_when_free_is_available( $rates, $package ) { | |
// Only modify rates if free_shipping is present | |
if ( isset( $rates[‘free_shipping’] ) ) { | |
// To unset a single rate/method, do the following. This example unsets flat_rate shipping | |
unset( $rates[‘flat_rate’] ); | |
// To unset all methods except for free_shipping, do the following | |
$free_shipping = $rates[‘free_shipping’]; | |
$rates = array(); | |
$rates[‘free_shipping’] = $free_shipping; | |
} | |
return $rates; | |
} |
Mostra solo la spedizione gratuita in tutti gli stati tranne l’elenco di esclusione. Nascondi free shipping se il cliente è in uno degli stati elencati:
/** | |
* Hide ALL shipping options when free shipping is available and customer is NOT in certain states | |
* Hide Free Shipping if customer IS in those states | |
* | |
* UPDATED FOR WOOCOMMERCE 2.1 | |
* | |
* 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; | |
} |