CAMPUS Code Snippets

Verberg verzendkost als gratis verzending beschikbaar is

PROBLEEM

PHP
/**
 * 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 );

In WooCommerce kan je perfect verzendkosten instellen, alsook een gratis verzending vanaf een bepaald bedrag. Maar WooCommerce toont altijd alle verzend mogelijkheden. Ja, ook als gratis verzending beschikbaar is.

Voor een koper kan dit heel bizar overkomen.

De vraag is dan:

  • Welke verzend mogelijkheid is de beste?
  • En is er een verschil tussen de gratis of betalende verzendkost.

Maar waarom toont WooCommerce dan verzendkosten als gratis verzending beschikbaar is?

Een hele goeie vraag met recht van rede. Het zou logisch zijn dat WooCommerce effectief alle verzendingen verbergt als “gratis verzending” beschikbaar is. Maar WooCommerce wil alle keuze’s open houden voor de webshop eigenaars. Er zijn webshops die meerdere verzendkosten hebben, of maatwerk verzendkost berekeningen hebben. In sommige gevallen moeten verzendkosten ook daadwerkelijk getoond worden, ook al is “gratis verzending” beschikbaar. Bijvoorbeeld: als je toch betalende verzendingen wil aanbieden met bijvoorbeeld een verzekering.

WooCommerce geeft de vrijheid aan de gebruiker, dus de webshop eigenaar.
Dus denk er voortaan aan als je een nieuwe woocommerce webshop laat bouwen of zelf bouwt; denk aan die gratis/betalende verzendcombinatie.

Gelukkig is er wel een heel makkelijke oplossing.
WooCommerce heeft hier zelfs een documentatie pagina over geschreven, zie deze pagina.

Opgelet: bovenstaande code laat énkel de gratis verzending zien. Maar wat als je ook “afhaal” aanbiedt. Afhaal wordt ook aanzien als een “verzend methode” door WooCommerce. In vakjargon ook wel “Local Pickup” genoemd.

Als je “gratis verzending” en “afhaal” wil laten zien, dan gebruik je deze code:

PHP
/**
 * 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 );

Alles even mooi uitgelegd in een video