De webwinkel is op zondag gesloten

Het voordeel van een webshop is dat hij 24/7 open is. Maar wat nu, wanneer je op zon- en feestdagen principieel niet wilt handelen? Een oplossing...

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!

Een aantal jaren geleden werd ik gebeld met wel een heel bijzondere vraag. De beller had een webshop en zijn webbouwer kon hem niet helpen met een voor hem wel heel principieel probleem. De webwinkelier wilde namelijk niet, dat mensen op zondag hij hem konden bestellen.

En hoewel zijn webbouwer een pop up had ingebouwd, die alleen op zondagen werd getoond en de mensen vertelden, dat ze op zondag niet konden bestellen, bleven de bestellingen op zondag binnenkomen.

Dit probleem heeft mij in eerste instanties heel wat hoofdbrekens gekost. Wat is een goede manier om dit op te lossen. Maar na wat geëxperimenteer ben ik er uiteindelijk uitgekomen.

Aanvullend was er ook de wens om ook op Christelijke feestdagen (maar dan ook weer niet alle) de webshop te sluiten. Om de code nog enigszins overzichtelijk te houden, heb ik dat onderdeel weggelaten, maar na het bekijken van de code, zal ik in het kort uitleggen, hoe ik dat laatste onderdeel heb opgelost.

Maar laten we eerst eens met de basiscode beginnen

<?php
add_action('init','wxp_woocommerce_not_on_sunday');

function wxp_woocommerce_not_on_sunday() {
   if (wxp_check_sunday_and_holiday()) {
      // Disable Cart, Checkout, Add Cart

      remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
      remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
      remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
      remove_action( 'woocommerce_checkout_order_review', 'woocommerce_checkout_payment', 20 );
      add_action( 'woocommerce_before_main_content', 'wxp_shop_closed', 5 );
      add_action( 'woocommerce_before_cart', 'wxp_shop_closed', 5 );
      add_action( 'woocommerce_before_checkout_form', 'wxp_shop_closed', 5 );
   }
}

function wxp_shop_closed() {
   // Melding op de shop page, cart en checkout.
   wc_print_notice('Op zon- en feestdagen is onze winkel gesloten. Ook online. Wij hopen op uw begrip','error');
}

function wxp_check_sunday_and_holiday() {
    //Kijk of het een zondag is
    if (date('w')==0) return true;
    return false;
}

Een hele lap tekst dus. Maar laten we eens met de laatste functie beginnen. De functie wxp_check_sunday_and_holiday. Jaren later realiseerde ik mij, dat de naam van de functie niet klopt, omdat het natuurlijk ‘sunday or holiday’ zou moeten zijn, maar een kniesoor die daar op let. (En ja, ik ben een kniesoor).

In deze vorm geeft de functie de waarde ’true’ terug wanneer de datum van vandaag een zondag is. Wat de functie date(‘w’) geeft een numerieke waarde voor de dag van de week terug, waarbij zondag 0 is en zaterdag 6.

Omdat Pasen en Pinksteren per definitie op zondag vallen, hoeven we dat niet te controleren. Het aardige van de Christelijke feestdagen is, dat deze -behalve Kerst- allemaal vanuit Pasen zijn berekend. Om het even mathematisch weer te geven :

Goede VrijdagPasen – 2
PaasmaandagPasen + 1
HemelvaartPasen + 40
PinksterenPasen + 50, is altijd een zondag
Tweede PinksterdagPasen + 51

Dan hoeven we alleen Kerst (25 december, altijd!) en Tweede Kerstdag (26 december, altijd!) te checken.

En om te kijken op welke datum Pasen valt in een bepaald jaar… daar heeft PHP een ingebouwde functie voor. Uiteindelijk is het een flinke lap tekst, wanneer je de hele functie uitschrijft, maar de complexiteit valt mee. De complete functionaliteit voor het checken van feestdagen vind je in een andere code snippet.

Bij het initiëren van WordPress wordt de functie ‘wxp_woocommerce_not_on_sunday’ aangeroepen. Die kijkt dus of het een zon- of feestdag is, en als dat zo is wordt de code uitgevoerd, is dat niet zo, dan wordt de hele code in de functie genegeerd.

De eerste handeling is dat alle ‘Add to Cart’ en ‘Proceed to Checkout’ knoppen worden verwijderd. Je kan dus wel kijken, maar niet kopen.

Mocht je naar de winkelpagina, winkelwagen of de checkout pagina gaan, dan krijg je als foutmelding de wxp_shop_closed melding.

Kortom, je kan gewoon door de winkel wandelen, maar niets kopen.

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

Beperk zoekresultaten tot bepaalde post-typen
Hoe beperk je de post typen die terug komen vanuit een zoekopdracht?
WooCommerce checkout velden verwijderen
Sommige velden in het bestelformulier van WooCommerce heb je absoluut niet nodig. En zo haal je ze w...
Een WooCommerce externe link in een nieuw tabblad openen
Wanneer je in je WooCommerce webshop (ook) affiliate producten aanbiedt, dan wil je eigenlijk niet dat...
Titel voor reacties aanpassen per CPT
Wil je de titel van je WordPress commentaar sectie aanpassen, dan moet je dit beslist lezen.
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...
Maak WP Courseware lessen zichtbaar in Elementor
Standaard kan Elementor Pro jouw WP Courseware Units niet vinden. Zo los je dit op.

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