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:
pre_get_posts
cârlig pentru a vă asigura că postările de la data de expirare nu sunt afișate.Pentru a finaliza acest tutorial, veți avea nevoie de:
Veți crea un plugin cu tot codul necesar pentru data de expirare și îl veți activa pe site. Deci sa începem!
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 metaFuncția este apoi atașată la add_meta_boxes
cârlig pentru a face foc la momentul potrivit.
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) ?>
Hai să trecem prin ce face asta:
tutsplus_expiry_date_metabox_callback ()
funcția de apel invers, cu $ postare
ca obiect al său.$ tutsplus_expiry_date
cu valoarea lui „Expiră“
meta cheie ca valoare.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
.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.
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:
editează postarea
pentru postul curent.isset
.$ new_expiry_date
și definește ca fiind valoarea introdusă.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ă.
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.
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) ?>
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.
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:
tutsplus_filter_expired_posts ()
funcția cu $ interogare
ca obiect al său.$ azi
ca data de astazi, folosind aceeasi formatare de data ca utilizatorul datepicker.$ metaquery
pentru a exclude posturile a căror dată de expirare este înainte de data de astăzi, folosind comparaţie
operator.$ 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!
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.