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:
pre_get_posts
gancio per garantire che i post oltre la data di scadenza non vengano visualizzati.Per completare questo tutorial avrai bisogno di:
Potrai creare un plug-in con tutto il codice necessario per la data di scadenza e attivarlo sul tuo sito. Quindi iniziamo!
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-boxLa funzione è quindi allegata al add_meta_boxes
aggancia per farlo sparare al momento giusto.
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) ?>
Passiamo attraverso ciò che fa:
tutsplus_expiry_date_metabox_callback ()
funzione di callback, con $ postale
come il suo oggetto.$ tutsplus_expiry_date
con il valore del 'scade'
meta chiave come valore.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
.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.
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:
modifica post
capacità per il post corrente.è impostato
.$ new_expiry_date
e lo definisce come il valore che è stato inserito.Quindi ora abbiamo una meta-box che consentirà agli utenti di aggiungere testo e salvarlo nei metadati dei post. Rendiamolo più sicuro.
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.
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) ?>
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.
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:
tutsplus_filter_expired_posts ()
funzione con $ query
come il suo oggetto.$ oggi
come data odierna, utilizza la stessa formattazione della data utilizzata da datepicker.$ metaquery
per escludere i postini la cui data di scadenza è precedente alla data odierna, utilizzando il comando confrontare
operatore.$ 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ì!
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.