Aggiungi una data di scadenza ai post di WordPress

Gestisco alcuni siti che includono avvisi e informazioni importanti in un banner sulla loro home page. Tendo ad usare un tipo di post personalizzato per questo, aggiungendo i miei banner e mostrandoli dove ho bisogno nel mio tema. (Se vuoi fare qualcosa di simile, è spiegato in questo tutorial.)

Ma invariabilmente i miei banner hanno una data di scadenza. Potrebbero contenere informazioni su un evento imminente o un posto vacante, per esempio. Una volta che l'evento è passato o il posto vacante è stato riempito, devo andare nel sito e cestinare manualmente il post.

Sarebbe molto più facile se, durante la creazione di post come questi, potessi dare loro una data di scadenza oltre la quale non saranno più visibili sul mio sito.

In questo tutorial ti mostrerò come fare esattamente questo. Ci sono tre passaggi:

  1. Crea una meta-box nella schermata di post-editing per la data di scadenza.
  2. Applica il Datepicker dell'interfaccia utente jQuery al campo della casella meta per migliorare l'interfaccia.
  3. Infine, usa il pre_get_posts gancio per garantire che i post oltre la data di scadenza non vengano visualizzati.

Di cosa avrai bisogno

Per completare questo tutorial avrai bisogno di:

  • un'installazione di sviluppo di WordPress
  • un editor di codice

Potrai creare un plug-in con tutto il codice necessario per la data di scadenza e attivarlo sul tuo sito. Quindi iniziamo!

Impostazione del plugin

Per prima cosa devi creare il tuo plugin. Nella cartella dei plugin nel tuo wp-content directory, creare un file vuoto chiamato tutsplus-post-scadenza-date-php.

Apri il file nel tuo editor di codice e aggiungi il seguente:

Dovrai modificare il file per usare il tuo nome e l'URL del plug-in, ma questo è quello che devi dire a WordPress che questo è un plugin e che cosa fa.

Ora vai al tuo plugin schermo nell'amministratore di WordPress e attivare il plugin.

Creare la Meta Box

Per prima cosa creeremo la meta-box per la data di scadenza.

Usando add_meta_box () per visualizzare una Meta Box

Il primo passo è creare la funzione che aggiungerà la meta-box alla schermata di post-editing. Aggiungi questo al tuo file di plugin:

function tutsplus_add_expiry_date_metabox () add_meta_box ('tutsplus_expiry_date_metabox', __ ('Data di scadenza', 'tutsplus'), 'tutsplus_expiry_date_metabox_callback', 'post', 'side', 'high');  add_action ('add_meta_boxes', 'tutsplus_add_expiry_date_metabox');

Questo usa il add_meta_box () funzione, che ha sei parametri:

  • 'Tutsplus_expiry_date_metabox': l'ID univoco di questa meta-scatola
  • __ ("Data di scadenza", "tutsplus"): questo è visualizzato come il titolo della meta-box
  • 'Tutsplus_expiry_date_metabox_callback': la funzione di callback che popolerà la meta-scatola (la creeremo in seguito)
  • 'inviare': il tipo di post su cui apparirà questa finestra di modifica
  • 'lato': in quale parte dello schermo apparirà la meta-box
  • 'Alto': in quale posizione apparirà la meta-box

La funzione è quindi allegata al add_meta_boxes aggancia per farlo sparare al momento giusto.

Creazione della funzione di richiamata

Se dovessi salvare il tuo plugin e caricare la tua schermata di modifica ora, vedresti un errore, perché la funzione di callback non è stata definita. Quindi lo faremo dopo.

Aggiungi questo al tuo file di plugin:

function tutsplus_expiry_date_metabox_callback ($ post) ?> 
ID, 'scade', vero); ?> />

Passiamo attraverso ciò che fa:

  • Definisce il tutsplus_expiry_date_metabox_callback () funzione di callback, con $ postale come il suo oggetto.
  • Si apre un elemento di forma.
  • Crea una variabile chiamata $ tutsplus_expiry_date con il valore del 'scade' meta chiave come valore.
  • Crea un'etichetta per il campo nella meta-box.
  • Crea un elemento di input con il Il mio appuntamento classe necessaria per il datepicker per funzionare, il nome tutsplus_expiry_date che utilizzeremo in seguito per il salvataggio dei dati dal campo e il valore $ tutsplus_expiry_date.
  • Chiude il modulo.

Così ora abbiamo la forma, ma in realtà non farà nulla a meno che non creiamo un'altra funzione per salvare i dati che gli utenti aggiungono ad essa.

Salvataggio dei dati su Post Salva

Per salvare qualsiasi input di dati nel modulo, dobbiamo creare una funzione e quindi allegarla al file save_post gancio.

Nel tuo file plugin, aggiungi questo:

function tutsplus_save_expiry_date_meta ($ post_id) // Controlla se l'utente corrente ha il permesso di modificare il post. * / if (! current_user_can ('edit_post', $ post-> ID)) restituisce; if (isset ($ _POST ['tutsplus_expiry_date'])) $ new_expiry_date = ($ _POST ['tutsplus_expiry_date']); update_post_meta ($ post_id, 'expires', $ new_expiry_date);  add_action ('save_post', 'tutsplus_save_expiry_date_meta');

Questo fa quanto segue:

  • Controlla se l'utente corrente ha il modifica post capacità per il post corrente.
  • In tal caso, controlla se i dati sono stati aggiunti al campo del meta box utilizzando è impostato.
  • Se questo è il caso, crea una variabile chiamata $ new_expiry_date e lo definisce come il valore che è stato inserito.
  • Infine, aggiorna i metadati per il post con quel valore.

Quindi ora abbiamo una meta-box che consentirà agli utenti di aggiungere testo e salvarlo nei metadati dei post. Rendiamolo più sicuro.

Aggiunta di un Nonce per la sicurezza

Per garantire che i metadati dei post vengano modificati solo tramite questo modulo, aggiungeremo un nonce.

Nella funzione di callback, prima del resto dei contenuti della funzione, aggiungi il seguente codice:

wp_nonce_field ('tutsplus_expiry_date_metabox_nonce', 'tutsplus_nonce');

Successivamente, nel tutsplus_save_expiry_date_meta () funzione per il salvataggio dei dati, aggiungere questo all'inizio della funzione:

if (! isset ($ _POST ['tutsplus_nonce']) ||! wp_verify_nonce ($ _POST ['tutsplus_nonce'], 'tutsplus_expiry_date_metabox_nonce')) return;

Ora salva il tuo plugin e dai un'occhiata alla schermata di modifica del post. Vedrai la tua meta-box:

Questo è un buon inizio, ma il problema è che al momento questo è un campo di testo normale, quindi non c'è modo di garantire che gli utenti inseriscano solo date e nel formato corretto. Lo correggeremo aggiungendo il datepicker dell'interfaccia utente jQuery.

Aggiunta del Datepicker dell'interfaccia utente JQuery

La grande notizia è che il datapicker jQuery UI viene precaricato con WordPress, quindi non è necessario registrarlo o installarlo: basta accodarlo in una funzione.

Nella parte superiore del file del plugin, aggiungi questo:

function tutsplus_load_jquery_datepicker () wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');  add_action ('admin_enqueue_scripts', 'tutsplus_load_jquery_datepicker');

Questo accoda sia lo script stesso che il foglio di stile per lo script, che è memorizzato nelle API di Google. Nota che devi agganciarlo al admin_enqueue_scripts gancio di azione e non a wp_enqueue_scripts come faresti se usassi lo script nel front-end.

Successivamente è necessario aggiungere uno script alla funzione di callback che emette il modulo. Dopo l'elemento di input e prima della chiusura tag, aggiungi questo:

 

Questo fa riferimento al Il mio appuntamento classe che hai già aggiunto all'elemento di input e aggiunge lo script datepicker.

La tua funzione di callback ora sarà simile a questa:

function tutsplus_expiry_date_metabox_callback ($ post) ?> 
ID, 'scade', vero); ?> />

Ora diamo un'occhiata a come la meta-box si occupa di salvare il mio file plugin:

È molto più bello! Ma anche se ora puoi aggiungere una data di scadenza ai tuoi post, non farà alcuna differenza se siano o meno visualizzati sul tuo sito. Cambiamo ora.

Modifica della query per escludere i post scaduti

Il passo finale è modificare la query principale usando il pre_get_posts gancio.

Funzionando ancora con il tuo file plugin, aggiungi questo codice:

la funzione tutsplus_filter_expired_posts ($ query) // non incide sulle schermate di amministrazione se (is_admin ()) restituisce; // controlla la query principale if ($ query-> is_main_query ()) // filtra i post scaduti $ today = date ('d-m-Y'); $ metaquery = array (array ('key' => 'expires', 'value' => $ today, 'compare' => '<', 'type' => 'DATA', ) ); $ query-> set ('meta_query', $ metaquery);  add_action ('pre_get_posts', 'tutsplus_filter_expired_posts');

Questo fa sei cose:

  • Prima definisce il tutsplus_filter_expired_posts () funzione con $ query come il suo oggetto.
  • Controlla se siamo nelle schermate di amministrazione, poiché non vogliamo escludere i post scaduti da loro.
  • Quindi controlla se viene eseguita la query principale.
  • Se è così, definisce la variabile $ oggi come data odierna, utilizza la stessa formattazione della data utilizzata da datepicker.
  • Quindi definisce $ metaquery per escludere i postini la cui data di scadenza è precedente alla data odierna, utilizzando il comando confrontare operatore.
  • Alla fine, resetta la query usando il $ metaquery variabile.

La funzione è agganciata a pre_get_posts che lo farà funzionare mentre la query recupera i post.

Ora salva il tuo file plugin e provalo. Crea un post con una data di pubblicazione di alcuni giorni nel passato e quindi dargli una data di scadenza di ieri. Salvalo e passa alla pagina del tuo blog principale. Scoprirai che il post che hai appena creato non è lì!

Sommario

Essere in grado di far scadere automaticamente i tuoi post in una determinata data può essere molto utile. Se il contenuto di un post non è più pertinente, o non vuoi che le persone lo vedano dopo una certa data, l'aggiunta di una data di scadenza ti salva dal dover ricordare di modificare o eliminare il post una volta che non è più necessario.

Usando il jQuery datepicker, hai creato una meta box user-friendly che puoi usare per farti risparmiare tempo e la confusione dei tuoi visitatori.