De webwinkel is op zondag gesloten

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...

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()) {


      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() {

   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() {

    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.

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.

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

Een 'Niet op voorraad' knop in WooCommerce
Hoe voorkom je teleurstelling bij je klant wanneer hij zijn favoriete product bij jou vindt, zonder dat...
jQuery Migrate verwijderen voor meer snelheid
Voor de meeste WordPress websites is jQuery Migrate al heel lang niet meer nodig. Je kan enigszins de...
Een 'terug' knop voor je webpagina
Stel, je bezoeker is op een pagina en je wilt dat die bezoeker eenvoudig terug kan gaan naar de voorgaande...
WooCommerce Add to Cart button-tekst aanpassen
Hoe pas je de tekst van je 'add to cart' button makkelijk aan?
De presentatie van variabele producten hun prijs verbeteren
Een variabel product wordt in WooCommerce weergegeven als een prijs €100-€250 in plaats van 'vanaf €...
Titel voor reacties aanpassen per CPT
Wil je de titel van je WordPress commentaar sectie aanpassen, dan moet je dit beslist lezen.

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 antwoord

Het e-mailadres wordt niet gepubliceerd.

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

Contact Information

WordXPression 
Imkersdreef 525
7328DG Apeldoorn
06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Flinke kortingen op cursussen van WordXPression.