Molto spesso mi viene chiesto dai clienti di “mettere in pausa” il loro eCommerce durante il periodo di ferie, quando sarebbero impossibilitati ad effettuare le spedizioni degli ordini ricevuti. Per raggiungere questo scopo esistono diversi modi che ci permettono di bloccare la vendita dei prodotti di un negozio realizzato con WooCommerce, ognuna con dei pro e dei contro, ma quella qui descritta vi permetterà di farlo in maniera efficace e con pochissime righe di codice.

Senza dilungarmi troppo, prima di arrivare al sodo vi voglio elencare alcune vie alternative alla modifica del codice, magari più usate e meno “tecniche”, ma descriverò anche perché ho scelto di escluderle dalle soluzioni applicabili.

I metodi comunemente più utilizzati per mettere in pausa per ferie un negozio WooCommerce sono:

  • utilizzare un plugin
    ne esistono diversi che compiono egregiamente il loro dovere, sia gratuiti che a pagamento. Una volta installati, in 5 minuti sarete pronti per andare in vacanza sicuri di aver inibito gli ordini dal vostro negozio per tutto il periodo della vostra assenza. Siccome però non amo caricare troppo il sistema usando troppi plugin, anche se questo è forse il compromesso più pratico ho scelto di bocciare questa soluzione.
  • l’opzione di WooCommerce “Avviso del negozio”
    WooCommerce prevede nativamente che si possa inserire un messaggio sul sito, e per farlo basta entrare nell’admin di WordPress e abilitare l’avviso che si trova aprendo le voci di menu “aspetto -> personalizza -> woocommerce -> avviso del negozio”. In 30 secondi avrete fatto apparire il vostro messaggio di “chiuso per ferie” ma a tutti gli effetti il sito sarà ancora predisposto a ricevere gli ordini. Tanto semplice da farsi quanto poco professionale e incompleto il risultato!
  • azzerare la disponibilità dei prodotti
    per questo metodo basta agire sulle quantità dei prodotti, applicando una modifica massiva a tutti gli articoli e azzerandone la quantità. Questo metodo è apparentemente molto rapido ed efficace, ma rimane però il problema di dover reinserire tutte le corrette giacenze una volta tornati dalle ferie… mmmh, davvero impraticabile direi!
  • programmare una funzione personalizzata
    è la soluzione che preferisco, snella ed efficace. Con poche righe di codice otterrete il risultato che volete ed avrete tutta la flessibilità che vi serve per integrare perfettamente il messaggio nel layout e nello stile grafico del vostro sito.

Vediamo ora qui di seguito come fare, in pochi rapidi passaggi.

Come mettere in pausa il negozio WooCommerce con poche righe di codice

WooCommerce, messaggio di negozio in pausa per ferie

Per farlo sarà sufficiente andare a creare/modificare 3 file:

  1. modificare il file ‘functions.php’, dove andremo a scrivere la nostra nuova funzione
  2. creare un nuovo file da includere, dove verrà inserito il testo del messaggio di pausa per ferie (a vostra discrezione con un po’ di codice HTML/CSS per renderlo accattivante)
  3. modificare il file ‘header.php’ per inserire la chiamata alla funzione creata

Entriamo ora nei dettagli.

Ridotta all’osso l’operazione è molto semplice, e consiste fondamentalmente nel creare una funzione (da inserire nel file ‘functions.php’ del vostro tema WordPress) che disabiliti la possibilità di acquistare i prodotti. Per fare questo sarà sufficiente utilizzare il codice qui descritto e tutti i bottoni per l’acquisto saranno magicamente spariti, e la vendita di qualsiasi prodotto inibita dal vostro negozio WooCommerce. L’intero catalogo rimarrà visibile e navigabile ma voi sarete pronti a godervi le vostre ferie! Questo è il codice:

add_action ('init', 'my_woo_holiday_mode');
function my_woo_holiday_mode() {
	add_filter( 'woocommerce_is_purchasable', '__return_false');
}

Limitarsi solamente ad inibire i bottoni di acquisto sarebbe forse un po’ fuorviante se non motivassimo per quale ragione nel nostro negozio sono inibite le vendite: meglio quindi aggiungere un’avviso chiarificatore su tutte le pagine del sito. Per fare ciò il codice da implementare, sempre nel file ‘functions.php’, è davvero semplice ed è il seguente:

function my_woo_holiday_message() {
	include ( TEMPLATEPATH . '/inc/woo-holiday-message.php' );
}

Il codice basico da inserire nel file ‘woo-holiday-message.php’ è infine quello che trovate qui di seguito. Aggiungete voi il codice CSS che serve a rendere graficamente piacevole il vostro messaggio di chiuso per ferie, ma siccome questo esula dall’intento di questo articolo lascio a voi e alla vostra creatività la scelta di come farlo:

<aside id="holiday-message">CHIUSO PER FERIE</aside>

Fatto ciò, la funzione ‘my_woo_holiday_message’ può essere invocata all’interno del file ‘header.php’, così da far visualizzare il messaggio in tutte le pagine del vostro sito:

<?php my_woo_holiday_message(); ?>

Tutto qui, il gioco è fatto!

Delimitare l’arco di tempo in cui il negozio WooCommerce è chiuso per ferie

Con il codice visto finora potremmo considerarci soddisfatti, se non fosse che cosi facendo dovremmo non solo aspettare l’ultimo momento prima di partire per le vacanze per modificare il codice, ma anche ricordarci una volta rientrati dalle ferie di rimettere tutto a posto… perchè allora non temporizzare il tutto?

Per fare questo bisogna integrare il codice scritto creando due variabili per indicare la data di inizio e quella di fine del periodo di chiusura (le trovate dopo ‘strtotime’, ma attenti ad usare il formato mm/gg/aaaa), e includere in una condizione “if” il codice che abbiamo preparato precedentemente.
Il risultato finale completo del file ‘functions.php’ diventerà quindi il seguente:

$oggi = date('Y-m-d');
$oggi = date('Y-m-d', strtotime($oggi));
$inizioFerie = date('Y-m-d', strtotime("08/01/2021"));
$fineFerie = date('Y-m-d', strtotime("08/31/2021"));
if (( $oggi >= $inizioFerie) && ($oggi <= $fineFerie )) {
	$ferieOn = 'ferieOn';
	global $ferieOn;
	add_action ('init', 'my_woo_holiday_mode');
	function my_woo_holiday_mode() {
		add_filter( 'woocommerce_is_purchasable', '__return_false');
	}
}
function my_woo_holiday_message() {
	include ( TEMPLATEPATH . '/inc/woo-holiday-message.php' );
}

Ora che abbiamo una variabile ‘$ferieOn’ che ci dice se ci troviamo nell’arco di tempo delimitato tra la data di inizio e quella di fine della pausa per ferie, dobbiamo modificare come segue il file ‘woo-holiday-message.php’, introducendo una condizione che determina se visualizzare o meno il messaggio di pausa del negozio:

<?php
	global $ferieOn;
	if ( $ferieOn == 'ferieOn' ) : ?>
		<aside id="holiday-message">CHIUSO PER FERIE</aside>
<?php endif; ?>

Questo è tutto. Sentitevi liberi di usare questo codice, modificarlo e perchè no se potete anche migliorarlo, ma soprattutto… buone vacanze!

se ti piace questa pagina condividila