In questo blog avevo già scritto precedentemente un post che insegna come, con poche righe di codice inserite nel file functions.php del tema, fosse possibile chiudere per ferie il vostro sito WooCommerce nei giorni contenuti nell’intervallo tra due date indicate.
Metodo semplice da implementare ma scomodo da gestire nel tempo, perché implica che debba essere il webmaster a modificare di volta in volta la data di inizio e quella di fine del periodo di chiusura codificate nella funzione.

Gestire la pausa per ferie direttamente dall’admin di WooCommerce

Anche se esistono già plugin nati appositamente per questo scopo, rimane pur sempre vero che esagerare con l’uso di essi non è mai troppo consigliabile, o perlomeno nel mio caso cerco sempre di ridurli esclusivamente a quelli strettamente necessari. Ce n’è però uno a cui proprio non posso rinunciare e che ormai fa parte del mio kit di default di ogni installazione WordPress.
Il plugin a cui mi riferisco è Advanced Custom Fields PRO, che mi permette di creare campi personalizzati che normalmente non sarebbero disponibili a chi deve gestire l’e-commerce, come ad esempio proprio quelli che mi serviranno ad aggiungere le date di inizio e di fine del periodo di chiusura per ferie.

I custom fields di WordPress (o campi personalizzati) consentono di aggiungere ulteriori informazioni (metadati) ai post e alle pagine, ma nel nostro caso dobbiamo assicurarci che questi metadati siano disponibili in qualsiasi posizione del sito, e non vincolati solamente ad uno specifico post o pagina.

Per fare questo quello che ci serve è creare un contesto dove poter inserire questi metadati globalmente, ed è proprio qui che comincia la magia di Advanced Custom Fields PRO, che ci permetterà di creare una “pagina delle opzioni” che fornirà una serie di funzioni per nuovi campi personalizzati i cui dati saranno salvati a livello globale e quindi disponibili in tutto il sito.

la schermata di Advanced Custom Fields PRO con il riepilogo dei campi personalizzati creati

Cosa vogliamo ottenere da questo intervento

  • una pagina per raccogliere le date di inizio e di fine del periodo di chiusura per ferie
  • durante il periodo di ferie disabilitare i bottoni che permettono di mettere i prodotti nel carrello
  • visualizzare un messaggio sul sito che appaia solamente durante il periodo di ferie
la finestra di admin dove il gestore del negozio può inserire le date di chiusura e il messaggio per il front-end

La funzione che trovate qui sotto è la prima cosa che ci serve, e il suo codice deve essere inserito nel file functions.php del tema WordPress.

Essa ci permetterà di creare il nuovo elemento nel menu di WordPress che conterrà tutti i campi che ci serviranno per caricare le informazioni necessarie ad implementare il meccanismo di chiusura per ferie.

if ( function_exists( 'acf_add_options_page' ) ) {
	acf_add_options_page ( array (
		'page_title' 	=> 'Dati statici cliente',
		'menu_title'	=> 'Dati statici',
		'menu_slug' 	=> 'theme-general-settings',
		'capability'	=> 'edit_posts',
		'redirect'	=> false
	));
}

La seconda cosa da fare è creare la funzione che vada a leggere i dati dal form appena creato. Anche questo codice deve essere inserito nel file functions.php del tema del sito.

La funzione dovrà:

  • effettuare la verifica della data del giorno in corso, e inserirla nella variabile $oggi
  • creare due variabili dai valori dai metafield $datedeb_new e $datedeb_fin, che immagazzinano la rispettivamente la data di inizio e di fine chiusura del negozio
  • controllare se la data odierna è interna alle due date di inizio e fine, nel qual caso crea una variabile $ferieOn da utilizzare per attivare ciò che mi serve eseguire sul sito nel periodo di ferie.
  • nel mio caso voglio che sul sito i prodotti non siano vendibili, quindi uso la funzione add_filter(‘woocommerce_is_purchasable’) per inibire il bottone che aggiunge i prodotti al carrello.
$oggi = date('Y-m-d');
$oggi = date('Y-m-d', strtotime($oggi));

global $datedeb_new;
global $datefin_new;

$datedeb_new = date('Y-m-d', strtotime( get_field('datedeb_new', 'option' )));
$datefin_new = date('Y-m-d', strtotime( get_field('datefin_new', 'option')));

if (( $oggi >= $datedeb_new ) && ( $oggi <= $datefin_new )) {
	global $ferieOn;
	$ferieOn = 'ferieOn';
	add_action ('init', 'my_woo_holiday_mode');
	function my_woo_holiday_mode() { // disabilito la possibilità di vendere i prodotti
		add_filter( 'woocommerce_is_purchasable', '__return_false');
	}
}

Ora voglio visualizzare il messaggio che avvisa della chiusura del negozio, quindi aggiungo anche questo codice a quello indicato sopra:

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

Per finire, l’ultimo blocco di codice è quello che gestisce il messaggio di chiusura per ferie e deve essere caricato dal template delle pagine. Potete inserirlo nella posizione dove preferite appaia nel layout del vostro e-commerce, e sarà la variabile $ferieOn a stabilire se visualizzarlo o meno sul sito:

<?php
	global $ferieOn;
	if ( $ferieOn == 'ferieOn' ) : ?>
	
	<?php if ( get_field('holiday_message', 'option') ) : ?>
		<aside id="holiday-message" class="entry-content">
			<?php the_field('holiday_message', 'option'); ?>
		</aside>
	<?php endif; ?>

<?php endif; ?>

Bene, questo è tutto per oggi!
Non mi rimane che… augurarvi buone ferie!

se ti piace questa pagina condividila