Adăugați o dată de expirare la mesajele WordPress

Realizez câteva site-uri care conțin anunțuri și informații importante într-un banner pe pagina lor de pornire. Am tendința de a utiliza un tip de post personalizat pentru acest lucru, adăugând bannerele mele și afișându-le unde am nevoie în tema mea. (Dacă doriți să faceți ceva similar, este explicat în acest tutorial.)

Dar, invariabil, bannerele mele au o dată de expirare. Acestea ar putea conține informații despre un eveniment viitoare sau o vacanță, de exemplu. Odată ce evenimentul a trecut sau locul vacant a fost umplut, trebuie să intru pe site și să dărâm manual postul.

Ar fi mult mai ușor dacă, atunci când creați postări ca acestea, le-aș putea da o dată de expirare după care nu vor mai fi vizibile pe site-ul meu.

În acest tutorial vă voi arăta cum să faceți exact acest lucru. Există trei pași:

  1. Creați o casetă de meta în ecranul de editare post pentru data de expirare.
  2. Aplicați selectorul de date jQuery UI în câmpul meta-câmp pentru a îmbunătăți interfața.
  3. În cele din urmă, utilizați pre_get_posts cârlig pentru a vă asigura că postările de la data de expirare nu sunt afișate.

Ce vei avea nevoie

Pentru a finaliza acest tutorial, veți avea nevoie de:

  • o instalare de dezvoltare a WordPress
  • un editor de cod

Veți crea un plugin cu tot codul necesar pentru data de expirare și îl veți activa pe site. Deci sa începem!

Configurarea pluginului

Mai întâi trebuie să creați pluginul. În dosarul de pluginuri din dosarul dvs. wp-content director, creați un fișier gol numit tutsplus-post de expirare-data-php.

Deschideți fișierul din editorul de cod și adăugați următoarele:

Va trebui să editați fișierul pentru a utiliza numele propriu și adresa URL a pluginului, dar acesta este ceea ce trebuie să spuneți WordPress că acesta este un plugin și ce face.

Acum du-te la tine Plugin-uri ecranul în administratorul WordPress și activarea pluginului.

Crearea metalei

Mai întâi vom crea meta-caseta pentru data de expirare.

Folosind add_meta_box () pentru a afișa o Meta Box

Primul pas este să creați funcția care va adăuga caseta meta în ecranul de editare post. Adăugați acest lucru în fișierul plugin:

funcția tutsplus_add_expiry_date_metabox () add_meta_box ('tutsplus_expiry_date_metabox', __ ('Data de expirare', 'tutsplus'), 'tutsplus_expiry_date_metabox_callback', 'post', 'side', 'high');  add_action ('add_meta_boxes', 'tutsplus_add_expiry_date_metabox');

Aceasta utilizează add_meta_box () care are șase parametri:

  • 'Tutsplus_expiry_date_metabox': ID-ul unic al acestei metale
  • __ ("Data expirării", "tutsplus"): acesta este afișat ca titlul căsuței meta
  • 'Tutsplus_expiry_date_metabox_callback': funcția de apel invers care va popula caseta meta (vom crea acest lucru în continuare)
  • 'post': tipul de post a cărui ecran de editare va apărea în această casetă meta
  • 'latură': ce parte a ecranului va apărea în caseta meta
  • 'înalt': în care va apărea caseta meta

Funcția este apoi atașată la add_meta_boxes cârlig pentru a face foc la momentul potrivit.

Crearea funcției Callback

Dacă ați salva plugin-ul și încărcați acum ecranul de editare, ați vedea o eroare, deoarece funcția de apel invers nu a fost definită. Așa că vom face asta în continuare.

Adăugați acest lucru în fișierul plugin:

funcția tutsplus_expiry_date_metabox_callback ($ post) ?> 
ID, "expiră", adevărat); ?> />

Hai să trecem prin ce face asta:

  • Definește tutsplus_expiry_date_metabox_callback () funcția de apel invers, cu $ postare ca obiect al său.
  • Se deschide un element de formă.
  • Creează o variabilă numită $ tutsplus_expiry_date cu valoarea lui „Expiră“ meta cheie ca valoare.
  • Creează o etichetă pentru câmp în caseta meta.
  • Creează un element de intrare cu Intalnirea mea clasa necesară pentru data de la care să lucreze, numele tutsplus_expiry_date pe care o vom folosi mai târziu când salvăm date din câmp și valoarea $ tutsplus_expiry_date.
  • Aceasta închide formularul.

Așa că acum avem forma, dar nu va face nimic dacă nu creăm o altă funcție pentru a salva utilizatorii de date care se adaugă la ea.

Salvarea datelor privind salvarea mesajelor

Pentru a salva orice intrare de date în formular, trebuie să creăm o funcție și apoi să o atașăm la save_post cârlig.

În fișierul pluginului, adăugați aceasta:

funcția tutsplus_save_expiry_date_meta ($ post_id) // Verificați dacă utilizatorul curent are permisiunea de a edita postarea. * / if (! current_user_can ('edit_post', $ post-> ID)) retur; dacă isset ($ _POST ['tutsplus_expiry_date'])) $ new_expiry_date = ($ _POST ['tutsplus_expiry_date']); update_post_meta ($ post_id, 'expiră', $ new_expiry_date);  add_action ('save_post', 'tutsplus_save_expiry_date_meta');

Acest lucru face următoarele:

  • Verifică dacă utilizatorul curent are editează postarea pentru postul curent.
  • Dacă da, verifică dacă au fost adăugate date în câmpul meta cutie isset.
  • În acest caz, se creează o variabilă numită $ new_expiry_date și definește ca fiind valoarea introdusă.
  • În cele din urmă, actualizează metadatele pentru post cu acea valoare.

Așadar, acum avem o casetă meta care va permite utilizatorilor să adauge un text și să-l salveze în metadatele postate. Să o facem mai sigură.

Adăugarea unui termen pentru securitate

Pentru a ne asigura că metadatele postului sunt editate numai prin intermediul acestui formular, vom adăuga un cod nonce.

În funcția de apel invers, înainte de restul conținutului funcției, adăugați următorul cod:

wp_nonce_field ('tutsplus_expiry_date_metabox_nonce', 'tutsplus_nonce');

Apoi, în tutsplus_save_expiry_date_meta () pentru salvarea datelor, adăugați aceasta la începutul funcției:

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

Acum salvați plugin-ul și uitați-vă la ecranul de editare a postărilor. Veți vedea căsuța meta:

Acesta este un început bun, dar problema este că în prezent acesta este un câmp de text normal, astfel încât nu există nicio modalitate de a vă asigura că utilizatorii dvs. introduc numai datele la acesta și în formatul corect. Vom corecta acest lucru adăugând jQuery UI datepicker.

Adăugarea setului de date JQuery UI Datepicker

Vestea minunată este că jQuery UI datepicker vine preloaded cu WordPress, deci nu trebuie să-l înregistrezi sau să-l instalezi: îl înveți doar într-o funcție.

În partea de sus a fișierului pluginului, adăugați aceasta:

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

Acest lucru încalcă atât script-ul propriu-zis, cât și foaia de stil pentru script, care este stocată în API-urile Google. Rețineți că trebuie să-l atașați la admin_enqueue_scripts cârlig de acțiune și nu pentru a wp_enqueue_scripts așa cum ați face dacă utilizați scenariul din capătul din față.

În continuare, trebuie să adăugați un script la funcția de apel invers care emite formularul. După elementul de intrare și înainte de închidere etichetă, adăugați aceasta:

 

Acest lucru face referire la Intalnirea mea clasa pe care ați adăugat-o deja la elementul de intrare și adaugă scriptul de datepicker la acesta.

Funcția dvs. de apel invers va arăta astfel:

funcția tutsplus_expiry_date_metabox_callback ($ post) ?> 
ID, "expiră", adevărat); ?> />

Acum, să aruncăm o privire asupra modului în care se uită la meta-caseta după ce salvez fișierul plugin:

E mult mai plăcut! Dar, deși acum puteți adăuga o dată de expirare la postările dvs., nu va avea nici o importanță dacă ele sunt afișate pe site-ul dvs. sau nu. Să schimbăm asta acum.

Modificarea interogării pentru a exclude mesajele expirate

Ultimul pas este de a modifica interogarea principală utilizând pre_get_posts cârlig.

Încă lucrează în fișierul pluginului dvs., adăugați acest cod:

funcția tutsplus_filter_expired_posts ($ query) // nu afectează ecranele de administrare dacă (is_admin ()) return; // verificați pentru interogarea principală dacă ($ query-> is_main_query ()) // filtrați mesajele expirate $ today = date ('d-m-Y'); $ metaquery = array (array ('cheie' => 'expiră', 'valoare' => $ astăzi, 'compara'<', 'type' => 'DATA', ) ); $ query-> set ('meta_query', $ metaquery);  add_action ('pre_get_posts', 'tutsplus_filter_expired_posts');

Aceasta are șase lucruri:

  • Mai întâi definește tutsplus_filter_expired_posts () funcția cu $ interogare ca obiect al său.
  • Verifică dacă suntem în ecranele de administrare, deoarece nu dorim să excludem mesajele expirate de la ele.
  • Apoi verifică dacă se execută interogarea principală.
  • Dacă da, acesta definește variabila $ azi ca data de astazi, folosind aceeasi formatare de data ca utilizatorul datepicker.
  • Apoi definește $ metaquery pentru a exclude posturile a căror dată de expirare este înainte de data de astăzi, folosind comparaţie operator.
  • În cele din urmă, aceasta resetează interogarea folosind $ metaquery variabil.

Funcția este conectată la pre_get_posts care o va face să ruleze pe măsură ce interogarea va prelua mesajele.

Acum salvați fișierul plugin și încercați. Creați o postare cu o dată de publicare câteva zile în trecut și apoi dați-i o dată de expirare de ieri. Salvați-l și treceți la pagina principală de blog. Veți găsi că postul pe care tocmai l-ați creat nu este acolo!

rezumat

Posibilitatea ca postările dvs. să expire automat la o anumită dată poate fi foarte utilă. Dacă conținutul unei postări nu mai este relevant sau nu doriți ca utilizatorii să vadă după o anumită dată, adăugarea unei date de expirare vă scutește de a nu fi nevoie să vă amintiți să editați sau să ștergeți articolul după ce nu mai este necesar.

Utilizând jQuery datepicker, ați creat o casetă de metadate ușor de utilizat pe care o puteți utiliza pentru a vă economisi timp și confuzia vizitatorilor.

Cod