Gratis verzending en overige verzending

WooCommerce gratis verzending – overige verzendopties verbergen

WooCommerce is een plugin waarmee je je WordPress website omtovert in een webshop. De standaardopties binnen WooCommerce zijn voldoende om een stevige basis voor je webshop neer te zetten. En voor (bijna) alle functies die niet standaard inbegrepen zijn, is er wel een losse plugin of een snippet beschikbaar.

Een snippet is een stukje code dat je toe kunt voegen aan het functions.php bestand van je thema. Hierdoor kun je op een eenvoudige manier aanpassingen in de werking van een thema of plugin doen. Dit is wel voor gevorderden en over het algemeen raad ik je aan hier niet zelf mee aan de slag te gaan. Helemaal niet als je in de voorgaande tekst minimaal twee termen tegen bent gekomen waar je de betekenis niet van kent ;-)

TIP: Lees eerst even alle opties in dit blog door voor je aan de slag gaat!

WooCommerce gratis verzending

Er is één ding binnen WooCommerce dat niet goed werkt en waarvan ik ook niet begrijp dat dit niet standaard opgelost wordt. Bij de verzendopties heb je de mogelijkheid om in te stellen dat verzending gratis is mits er boven een bepaald bedrag besteld wordt. Stel dat ik het volgende ingesteld heb:

  • Verzendkosten zijn € 3,95
  • Verzending bij een bestelling boven de € 50 is gratis

Je zou verwachten dat op het moment dat iemand voor meer dan € 50 bestelt, de gratis verzending automatisch geactiveerd wordt én de verzendkosten van € 3,95 verdwijnen. Dat is dus niet zo en daar gaat het mis. Want hoe verwarrend is het voor een bezoeker als de verzendkosten van € 3,95 standaard aangevinkt staan en hij zelf de optie gratis verzenden aan moet vinken? Deze verwarring kan zomaar een reden zijn voor de bezoeker om alsnog helemaal van de bestelling af te zien. En hoe vervelend is het als de bezoeker dan toch verzendkosten betaald, terwijl dat eigenlijk niet hoeft, en jij die weer terug moet gaan betalen?

Frustratie alom!

woocommerce gratis verzending en verzendkosten
Erg onduidelijk dit, toch?

De eerste stap die je kunt nemen om dit beter te maken is ervoor te zorgen dat de gratis verzending standaard aangevinkt staat. Dit kun je doen bij WooCommerce > Instellingen > Verzendmethoden. Klik op de naam van de zone waar de vaste verzendkosten en gratis verzending in ingesteld zijn. Als je naar beneden scrollt, zie je de verschillende verzendopties staan. Zorg dat gratis verzending boven aan staat door met je muis op de drie streepjes te klikken en de gratis verzending naar boven te slepen. Sla de wijzigingen op.

Zodra een bezoeker nu recht heeft op gratis verzending, wordt deze optie in ieder geval automatisch geselecteerd. Maar we hebben gemerkt dat dat nog steeds voor verwarring bij bezoekers zorgt waardoor ze toch zelf nog de verzendkosten aanklikken. Daarom raden we aan een van onderstaande opties door te voeren zodat ze overige verzendkosten verborgen worden als gratis verzending actief is.

Optie 1: overige verzendkosten verbergen bij gratis verzending m.b.v. een snippet

Met behulp van een snippet kunnen we dit hele frustratiestuk oplossen. De snippet zie je hieronder, werkt bij WooCommerce installaties 3.0 en hoger en zorgt ervoor dat als gratis verzending van toepassing is alle andere verzendopties verborgen worden. Als je weet hoe het werkt en al een childtheme hebt, kun je onderstaande code toevoegen aan het functions.php bestand van je childtheme. Als je niet weet wat een childtheme is of er geen een hebt, kun je gebruik maken van de plugin Code Snippets.

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

Het is ook mogelijk om niet alle verzendopties te verwijderen, maar alleen de betaalde variant. Naast gratis verzending blijft dan dus ook de optie om af te halen beschikbaar. Als je daar naar op zoekt bent, kun je onderstaande snippet gebruiken.

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

Beide snippets zijn afkomstig uit de developer documentatie van WooCommerce.

Snippet toevoegen met behulp van Code Snippets

Stap 1: Ga naar WooCommerce > Status > Tools en klik achter WC Transients op “Transients wissen”.

Stap 2: Ga naar Plugins > Nieuwe plugin en installeer en activeer de plugin Code Snippets

Plugin code snippets

Stap 3: In het dashboard menu is een nieuwe optie verschenen, Snippets. Klik daar op en kies “Nieuwe toevoegen”.

Stap 4: Vul als titel bijvoorbeeld Gratis verzending WooCommerce in. Kopieer bovenstaande code en plak deze in code veld. Klik vervolgens op “Wijzigingen opslaan en activeren”.

Optie 2: overige verzendkosten verbergen bij gratis verzending m.b.v. een plugin

Vind je bovenstaande stappen echt heel spannend? Dan kun je het beste de plugin WC Hide Shipping Methods gebruiken. Deze plugin is ook de beste keuze als je naast de gratis-verzenden-optie ook nog de afhalen-optie wilt laten zien.

Stap 1: Ga naar WooCommerce > Status > Tools en klik achter WC Transients op “Transients wissen”.

Stap 2: Ga naar Plugins > Nieuwe plugin en installeer en activeer de plugin WC Hide Shipping Methods

Stap 3: Ga naar WooCommerce > Instellingen > Verzendmethoden > Verzendopties. Kies voor 

woocommerce gratis verzending en afhalen

Zo lang deze optie niet standaard in WooCommerce opgenomen wordt, kun je deze twee opties proberen om het ‘probleem’ om te lossen.

Succes met (gratis) verzenden!

Hoe is het met het onderhoud van jouw website gesteld?
Enig idee waar je kunt zien hoeveel updates er zijn en waarom het belangrijk is dat je die uitvoert?

23 antwoorden
  1. Jos van Grinsven zegt:

    Hallo Rosanne,

    Alles goed?
    Een tijdje geleden hebben je mij de gouden tip gegeven betreffende een Website in Woocommerce. Nu heb ik met die 3 talige webshop met WPML een aantal foto’s voorzien van een alt tag i.v.m. SEO verbetering n.a.v. tegenvallend aantal bezoekers. En wat meer punten om de SEO te verbeteren.

    Maar nu heb ik een paar probleempjes:
    1. Ik heb een SEO titel in Yoast gezet. Maar nu staat die ook in de Engelse en Duitse taal in het Nederlands. Weet jij zo waar ik dat snel kan aanpassen?
    2. Een webshop in Woocommerce geeft vaak problemen in combinatie met een caching plug-in. maar aangezien de snelheid wat onder de maat is heb ik toch wat geprobeerd hiermee. Ik weet dat je de Cart en de Check-out uit de caching moet houden. Heb dit ook in WP Fastest Cache gedaan (normaal voor een WordPress website prima werkend). Maar in Woocommerce (wellicht in combinatie met WPML wat erg zwaar is) een drama. Heb je hier toevallig nog betaalbare tips om de prestaties te verbeteren?

    Het betreft de website: https://www.fire-art.eu/

    Al bij voorbaat bedankt.

    Met vriendelijke groet,

    Jos van Grinsven

    • Rosanne zegt:

      Hoi Jos,

      De meest makkelijke manier om antwoord te geven op vraag 1 is je deze link te geven: https://wpml.org/documentation/plugins-compatibility/using-wordpress-seo-with-wpml/ Hier leggen de makers van WPML zelf uit hoe je de Yoast SEO tool kunt gebruiken bij een meertalige website. Als het goed is, heb je bij elke taal een apart Yoast SEO blok waar je alle gegevens in kunt vullen. Heb je er wel elke keer voor gekozen om de pagina’s afzonderlijk van elkaar te vertalen? Na het kopiëren van het NL naar EN en DU heb je op die gekopieerde pagina’s een mogelijkheid gehad (rechts bovenin) om de pagina’s afzonderlijk te vertalen. Volgens mij is dat nodig om te zorgen dat je overal aparte SEO input in kunt vullen

      Wat betreft vraag 2: als ik in GTmetrix kijk, zie ik dat de optie “Add expires headers” nog een 0 scoort. Check even in WP Fastest Cache of je hier een optie voor hebt. Ik weet dat W3TC sowieso zo’n optie heeft, WP Fastest Cache volgens mij ook. Je zou ook de plugin JCH Optimize nog kunnen gebruiken om het aantal request te verminderen, maar wees hier wel voorzichtig mee. Hoop dat je hier iets aan hebt!

  2. Jos van Grinsven zegt:

    Hoi Rosanne,

    Weer hartstikke bedankt voor je snelle reactie en goede tips.
    Tip 1 over WPML heb ik meteen uitgevoerd.
    Met tip 2 ga ik ook aan de slag. Is een beetje opletten omdat caching met Woocommerce niet altijd goed werkt. Heb trouwens gehoord dat Varnish caching via de server prima werkt voor mijn toepassing.

    • Rosanne zegt:

      Varnish cache is inderdaad ook nog een goede optie om toe te voegen. Meeste hostingpartijen ondersteunen dat inmiddels wel. En anders kun je even een kijkje nemen bij ManagedWPHosting, goede partij voor managed WordPress hosting incl. varnish cache :-)

      • Jos van Grinsven zegt:

        Okay, bedankt weer Rosanne. Ook op zaterdag actief… Zal ik checken. Gisteren nog een paar blogs van jullie gelezen. Compliment voor de inhoud en de frisse tone of voice.
        Groet,
        Jos

  3. stefan zegt:

    Beste mensen,
    Deze oplossing is bijna goed genoeg voor mij, ik heb het volgende probleem:
    Ik verstuur soms per pallet ipv post nl.
    Ik heb een extra verzendklasse aangemaakt. (Pallet koerier)
    Alleen omdat ik vanaf 50,- gratis verzenden heb, gaat ie altijd boven de 50,- naar gratis. Zelfs als pallet koerier instel bij een produkt, gaat ie automatisch naar gratis verzenden omdat het bedrag boven de 50,- is.
    a. Ik wil dat ie dan alle andere verstopt, net als bij gratis.
    b. In de eerste plaats wil ik dat ie niet naar “gratis verzenden” gaat omdat ie dan ook nog eens de post.nl bezorgopties laat zien, en dat wil ik met een pallet ook niet.

    Heeft u hier een oplossing voor?
    Gr stefan

    • Rosanne zegt:

      Hoi Stefan,

      Wat is de volgorde van je verzendkosten in de backend (dus in de settings van WooCommerce)? Heb je de ‘gratis verzending’-optie boven of onder de “verzenden als pallet”-optie staan?

  4. Hanneke zegt:

    Voorheen was het in WooCommerce automatisch dat bij een download product geen verzendkosten berekend worden. Ineens worden er bij de downloadbare producten wel verzendkosten berekend. Ik heb al van alles geprobeerd (als verzendmethode heb ik ook gratis verzending ingesteld), maar ik krijg het niet opgelost. Vervelend, want nu kan ik steeds de verzendkosten terugboeken. Of mensen haken af.
    Hoe kan ik dit oplossen?
    Alvast dank!

    • Rosanne zegt:

      Hoi Hanneke,

      Wat vervelend dat het niet meer werkt. Kun je aangeven om welk product het gaat? Dan kan ik zelf even testen wat er gebeurt.

      Je zou ondertussen de suggestie van Stefan kunnen proberen, om bij een product zowel het vakje “virtueel” als “downloadbaar” aan te vinken. Door “downloadbaar” aan te vinken kun je het te downloaden bestand en de prijs toevoegen. Door “virtueel” aan te vinken geef je aan dat er niets verzonden hoeft te worden.

  5. Hanneke zegt:

    Dank jullie voor de reactie. Ik heb Stefans advies opgevolgd en nu werkt het weer goed. Dus nogmaals dank!

  6. Hidde zegt:

    Goedmiddag,

    Erg handig artikel! Nu heb ik alleen een vraagje; ik bied ook een Post NL pickup point service aan. Nu wil ik dat deze wel zichtbaar blijft boven de 50 euro. Is hier een speciaal stukje code voor?

    • Rosanne zegt:

      Hoi Hidde,

      Ik ga er vanuit dat je gratis verzending aanbiedt bij orders boven de € 50 en dat je dan dus alleen de bezorgoptie wilt verbergen maar de afhalen optie nog wel wilt tonen? Je vindt het antwoord op deze pagina: https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/ Als je i.p.v. de code in dit artikel de code gebruikt die je onder “How do I show only Local Pickup and Free Shipping” ziet staan, zou het helemaal goed moeten komen! Je kunt dit ook gewoon met de plugin Code Snippets toevoegen aan je website. Ik zal het artikel uitbreiden met deze informatie, goed punt!

      • Hidde zegt:

        Hey Rosanne,

        Bedankt voor je reactie. Die optie die je gestuurd hebt heb ik al geprobeerd. Alleen verbergt hij bij bestellingen boven de 50 euro nog steeds de Post NL optie. Ik werk met sendcloud en de optie heet ”servicepunt levering”. Volgens mij is dit iets anders dan local pickup.

        Weet je hoe ik dit zo krijg dat deze optie ook beschikbaar blijft bij bestellingen boven de €50?

        Alvast bedankt.

        • Rosanne zegt:

          Hoi Hidde,

          Ik ben geen backend developer maar ik zou kijken of je de code aan kunt passen. Er staat nu if ('local_pickup' === $rate->method_id ). Als je dat ‘local_pickup’ kunt vervangen door de naam die aan dat Sendcloud servicepunt gegeven wordt, heb je kans dat dat werkt.

  7. Hidde zegt:

    Erg bedankt Rosanne, het is mij op deze manier gelukt. Ik heb het stukje (‘local_pickup’ === $rate->method_id ) vervangen door: (‘service_point_shipping_method’ === $rate->method_id )

    Wellicht handig voor de volgende die hetzelfde probleem heeft :)

Reacties zijn gesloten.