Een ‘Niet op voorraad’ knop in WooCommerce

Hoe voorkom je teleurstelling bij je klant wanneer hij zijn favoriete product bij jou vindt, zonder dat jij voorraad hebt?

Wil je direct een mail ontvangen wanneer nieuwe snippets zijn toegevoegd?

Vul dan onderstaand formulier in en je krijgt direct na het toevoegen van nieuwe snippets een email. Zo blijf je altijd bij!

Vind jij het ook zo ongelofelijk irritant wanneer je in een product overzicht in een webshop net dat product ziet staan waar je naar op zoek was en zodra je erop klikt en naar het product toe gaat ziet, dat het niet op voorraad is?

Ik wel. Maar voortaan hoeven de bezoekers aan jouw webshop zich hier niet meer aan te irriteren, want met deze code snippet staat er voortaan, wanneer er geen voorraad van jouw product meer is, niet langer ‘In Winkelwagen’ op de knop, maar ‘Niet op voorraad’.

Vereiste is natuurlijk wel, dat je je voorraad bijhoudt in WooCommerce. WooCommerce kan veel, maar kan nog steeds niet zonder hulp jouw magazijnvoorraad bijhouden.

<?php 
add_filter( 'woocommerce_product_add_to_cart_text', 'wxp_out_of_stock_cart_button_text' );
  
function wxp_out_of_stock_cart_button_text( $text ) {
   global $product;       
   if ( $product && !$product->is_in_stock() ) {           
      return 'Niet op voorraad';
   } 
   return $text;
}

Regel 3-4 heeft wellicht wat uitleg nodig.

Variabelen in WordPress zijn normaliter lokaal aan de functie waarin ze gebruikt worden. Wanneer ik een variabele $x gebruik in een functie en er is ook een andere variabele $x ergens gedefinieerd, dan kan ik erop vertrouwen, dat ik binnen een functie altijd alleen kijk naar de variabele $x in mijn functie en naar geen enkele andere.

Soms wil je dat niet. Dan wil je dat alle functies kijken naar dezelfde variabele. En daarom kent PHP ook de mogelijkheid om ‘globale variabelen’ te definiëren.

In WordPress zelf heb je zo bijvoorbeeld de globale variabele $post, die je altijd kan raadplegen en de informatie bevat van de op dat moment actieve WordPress post. Of $wpdb, waarin je alle informatie hebt, om de WordPress database aan te spreken.

WooCommerce heeft ook een aantal van dat soort variabelen. Zoals $woocommerce, waarin je alle informatie over je webshop aan kan treffen. Of $product, waar de informatie over het op dat moment actieve product in staat.

Om te voorkomen dat je toch per ongeluk naar de verkeerde variabele kijkt, moet je -wanneer je een globale wilt gebruiken- deze expliciet importeren in de functie met het statement ‘global’.

Dus met global $product vertel ik PHP dat ik niet kijk naar een lokale variabele $product, maar naar de globaal gedefinieerde variabele.

De volgende regel lijkt misschien ook wat cryptisch

if ( $product && !$product->is_in_stock() )

Om die regel goed te begrijpen, moet je realiseren dat alles in PHP waar is, tenzij het expliciet niet waar is.

In sommige programmeertalen moet iets expliciet een waarde ’true’ geven om waar te zijn. In PHP is alles wat geen waarde ‘false’ of iets wat als ‘false’ geïnterpreteerd kan worden heeft, per definitie waar.

Deze regel kijkt dus, of er een variabele is met enige zinvolle inhoud en de naam $product. En als dat zo is, gaat de functie er vanuit dat het ook een $product object is met een methode ‘is_in_stock()’. Als er geen voorraad is, zal deze een waarde ‘false’ opleveren (het uitroepteken in PHP betekent ook ‘not’)

De code is eigenlijk helemaal niet ingewikkeld. Als je maar even de moeite neemt, dit te begrijpen.

Codesnippet verbeteren

Het doel van deze code snippet is een probleem op te lossen in een specifieke situatie. Daarom zie je regelmatig voorbeelden waar je specifiek tekst moet aanpassen om te krijgen wat je wilt. 

Wil jij leren hoe je complete plugins zelf kunt programmeren inclusief ‘admin’ schermen voor het instellen en de output in de gewenste taal, dan is misschien de cursus ‘Introductiecursus Plugins Programmeren‘ iets voor jou. 

Wil je als ‘full stack’ WordPress programmeur aan de gang gaan, dan biedt WordXPression ook een compleet traject ‘WordPress Developer‘ aan. Dit is een traject wat deels online, deels klassikaal wordt gegeven.

WordPress Developer worden?

Wil je leren hoe je zelf plugins, thema's, shortcodes, widgets, Gutenberg blocks en meer kan maken?
Schrijf je dan in voor de cursus WordPress Developer.

Meer snippets

De geschatte leestijd voor je content tonen
Laat de geschatte tijd voor een blogposts zien op diverse manieren.
Kolommen verbergen in de WooCommerce winkelwagen tabel
Stel, de verkoopt een product of producten waarvoor een klant er per definitie maar één aan kan schaffen....
De WordPress 'admin bar' ook daadwerkelijk alleen voor admins
Zelf vind ik de WordPress ‘admin bar’ heel handig om snel toegang te krijgen tot verschillende...
Een extra product veld toevoegen aan WooCommerce
Een aantal velden toevoegen aan een product is eigenlijk helemaal niet zo moeilijk. Ik laat je precies...
Beperk zoekresultaten tot bepaalde post-typen
Hoe beperk je de post typen die terug komen vanuit een zoekopdracht?
Een redirect na aankoop van een specifiek product
Hoe zorg je ervoor, dat na aankoop van een product iemand naar een specifieke pagina gaat?

Veiligheid voor alles!

Met betrekking tot de code die je hier aantreft een aantal waarschuwingen, voordat je deze code snippets toepast op je eigen website.

  1. Voer de code nooit direct uit op je eigen website, maar probeer deze eerst op een staging omgeving of een locale kopie van je website. 
  2. Voor je de geteste code installeert op je website, maak eerst een back up van je website.
  3. Zorg altijd voor alle zekerheid, dat je voor je een aanpassing live zet, je ook de FTP gegevens van je website bij de hand hebt.  
 
Voel je je onvoldoende vertrouwd met het toepassen van een dergelijke code snippet, bedenk dat je dit ook door een professional kan laten doen. De WordXPression support strippenkaart is een voordelige manier om dit soort aanpassingen te laten doen.
Heeft dit artikel je geholpen je probleem op te lossen?
Deel het met je vrienden via je favoriete social media.

Heb je vragen bij, of opmerkingen over deze code snippet, stel deze bij de commentaren hieronder.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Word je website de baas. Neem vandaag nog contact op!

Contact Information

WordXPression 

Bezoekadres
Eperweg 135 (op afspraak)
8072 PL Nunspeet

Postadres
Aardoliestraat 14-I
7553GT Hengelo

06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Introductiecursus Plugins Programmeren

wordpress coding Can use php code as background in html

Ontdek de wereld van WordPress Plugin ontwikkeling met WordXPression's introductiecursus