Fiind una dintre cele mai puțin utilizate funcții WordPress, WP-Cron este adesea uitat de dezvoltatori. Aplicațiile sale, totuși, nu reprezintă o problemă de râs. De la cache la notificări pentru a curăța, programarea cron de locuri de muncă poate lucra pentru a crea un avantaj distinct, chiar și blog-ul cel mai simplu WordPress. Alăturați-vă în timp ce explorăm aplicații importante ale acestui sistem.
WP-Cron nu este același ca un programator cron Unix?
Imediat după ce am văzut cuvântul cron, Sunt sigur că ați luat o înjurătură în cazul în care ne-am îndreptat: programarea evenimentelor perfect timp pentru a rula la intervale specificate. Dimpotrivă, WP-Cron nu este același cu un programator cron Unix. Distincția cheie constă în modul în care este rulat; spre deosebire de un proces de fundal, WP-Cron este lovit de fiecare dată când un vizitator deschide site-ul dvs. cu WordPress. Ca atare, ea păstrează caracteristica vitală a temporizării imprecise.
Da, ați citit corect: timpul incorect. Cu toate că cuvintele cron și precizia sunt ca două mazăre într-un pod, acestea nu se armonizează în sistemul WordPress. Dar aceasta este într-adevăr o problemă? Dacă este luată în considerare în contextul utilizatorului, acesta devine un bun.
Să luăm exemplul unei sarcini cron normale care rulează la fiecare cinci minute pentru a actualiza unele informații de bază de date utilizate pe un site Web. Dacă nici un vizitator nu vizitează site-ul timp de 40 de minute, atunci, care este punctul de executare a acestei sarcini de opt ori? Toate valorile intermediare ar fi ambele depășite și neutilizate. Dacă, dimpotrivă, ar fi trebuit să faceți o primă vizită de utilizator după cel puțin cinci minute, nu numai că ar fi realizat același loc de muncă, dar, de asemenea, ar împiedica actualizările inutile. Cu alte cuvinte, deoarece WP-Cron se bazează pe utilizator, acesta are avantajul de a fi difuzat numai când vizitatorii sunt prezenți.
Pentru a aplica WP-Cron, să luăm în considerare cea mai frecvent folosită aplicație de gestionare a RSS-urilor, FeedBurner. De departe, una dintre caracteristicile cele mai populare ale acestei aplicații este abilitatea de a număra abonații RSS. După indexare, numărul de abonați ai unui site poate fi accesat printr-un simplu apel API. Prin urmare, acest apel API poate fi efectuat o singură dată pe pagină, pentru a furniza numărul de abonați spectatorilor. Acest lucru, totuși, duce la o problemă.
Dacă API-ul FeedBurner este accesat o dată pe vizualizare pe pagină, acesta conduce în mod inevitabil la o cerere suplimentară HTTP - fără a mai menționa unul din alt domeniu - pentru fiecare vizitator. Aceasta crește timpul de încărcare a paginii pentru utilizatori.
Pentru a contracara această problemă, este important să realizați o realizare-cheie despre această metodă de difuzare: este puțin probabil ca un număr de abonați RSS să se actualizeze în fiecare vizualizare a paginii. De fapt, FeedBurner actualizează doar numărul său o dată pe zi. Chiar dacă ar trebui să se schimbe rapid, este cu adevărat necesar să se afișeze ultimul număr pentru fiecare vizitator? Contează faptul că contele este puțin depășit, dar ulterior reîmprospătat într-o zi?
Pentru scopurile noastre, este inutil să preluăm numărul de abonați RSS pentru fiecare vizualizare de pagină. În schimb, dacă este recuperat pentru un vizitator, acesta poate fi pur și simplu reutilizat pentru cele viitoare. Apoi, după ce a trecut o zi, se poate face o actualizare la acest număr. Un astfel de proces este cunoscut sub numele de caching. După actualizare, numărul de abonați RSS este stocat în memoria cache-pentru a fi utilizat în viitor, în loc să fie recalculat - până când nu a trecut o zi. Și, cu asta, intrăm în lumea WP-Cron.
Pentru a înțelege WP-Cron, este important să știți unde este disponibilă documentația. WordPress.org oferă rezumate ale fiecărei funcții cron în Codul său. Pentru a finaliza sarcina definită anterior, va trebui să ne uităm la wp_schedule_event
funcție, care necesită patru parametri:
Evenimentul nostru va declanșa atunci când ora curentă depășește sau depășește timpul transmis acestei funcții, așa cum este prescris de un viitor vizitator al site-ului web. Apoi se va retrigera pe baza parametrului de recurență, care poate fi setat pe oră, pe douăzeci de zile, zilnic sau nu. De asemenea, pot fi definite programe personalizate de recurență.
Pentru a face față evenimentului, se utilizează un cârlig. Pe scurt, un cârlig WordPress poate fi considerat un substituent pentru o acțiune. Acțiunile pot fi atribuite cârligelor prin WordPress " ADD_ACTION
funcţie. Mai precis, pentru a adăuga un handler de funcții la cârligul dat, se poate apela:
add_action ('nume_hang', 'nume_funcțional');
unde hook_name și nume_funcțional sunt numele funcției de cârlig și de manipulare, respectiv.
Deoarece actualizările FeedBurner o dată pe zi, vom specifica un program zilnic, conform codului de mai jos:
wp_schedule_event (timp (), 'zilnic', 'feedburner_refresh');
Rețineți că timp()
este timestampul curent UNIX în câteva secunde. Dacă rulați, cârligul "UpdateBurner Update" va declanșa imediat și apoi o dată pe zi după aceea. Rețineți că dacă am fi pus acest lucru în fișierul nostru functions.php WordPress, acesta ar programa un nou eveniment la fiecare încărcare de o singură pagină. Aceasta nu este funcționalitatea dorită; mai degrabă, dorim doar să programați acest eveniment o dată. Cea mai ușoară modalitate de a face acest lucru este să verificați dacă evenimentul este deja programat. Acest lucru se poate face prin wp_next_scheduled
care va reveni la fals dacă evenimentul nu este setat să declanșeze în viitor sau în timpul următorului declanșator altfel:
dacă (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (timp (), 'zilnic', 'feedburner_refresh');
Dacă avem vreodată nevoie să neprogramăm acest eveniment, este la fel de simplu ca și apelarea wp_unschedule_event
funcția, care ia aceiași parametri - cu excepția recurenței - ca wp_schedule_event
. Rețineți că timpul trecut trebuie să fie timpul următorului declanșator, care poate fi recuperat prin intermediul wp_next_scheduled
:
dacă (false! == ($ timp = wp_next_scheduled ('feedburner_refresh'))) wp_unschedule_event ($ timp, 'feedburner_refresh');
De asemenea, putem neplaji acest eveniment prin numele său de cârlig folosind wp_clear_scheduled_hook
funcţie. Rețineți că această alternativă va elimina, de asemenea, toate celelalte evenimente care utilizează același cârlig.
wp_clear_scheduled_hook ("feedburner_refresh");
Acum, că evenimentul nostru este programat, trebuie să adăugăm un handler la acesta:
add_action ('feedburner_refresh', 'update_rss_subscriber_count');
Aceasta stabilește funcția numită update_rss_subscriber_count
să fie numit odată feedburner_refresh
cârligul este declanșat. Acum este timpul să scriem această funcție.
Pentru a prelua numărul de abonați în update_rss_subscriber_count
, putem efectua un apel către API-ul FeedBurner prin intermediul adresei URL
Aceasta va returna datele XML în următoarea formă:
Informațiile pe care le căutăm se află în atributul de circulație. Următoarea expresie regulată poate analiza cu ușurință datele pentru această valoare: circulație = "(. *?)"
.
În engleză, expresia noastră regulată se potrivește cu următoarele:
circulație =
- Cuvântul de circulație urmat de un semnal egal"(. *?)"
- Citate și tot ce este în interior Rularea cu ajutorul funcției preg_match
funcția va prelua o serie de potriviri care vor conține numărul de abonați în prima poziție index. Punerea împreună a acestor informații duce la următorul cod:
// găsiți urlul FeedBurner și obțineți datele de la el // modificați [NAME] pe numele feedului dvs. FeedBurner $ url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri= [ NUME]'; $ date = @file_get_contents ($ url); // @ va suprasolicita erorile // foloseste o expresie regulata pentru a analiza datele $ regex = '% circulation =' (. *?) "%"; preg_match ($ regex, $ date, $ matches); // obține numărul rezultat dacă este disponibil $ count = false; dacă ($ meciuri && $ meciuri [1]) $ count = (int) $ matches [1];
Acum că am recuperat numărul de abonați, va trebui să-l stocăm pentru accesibilitate; în loc să revizuiască datele XML API, vizitatorii vor accesa doar această valoare stocată.
În loc să creați o bază de date sau un fișier pentru stocare, putem folosi o altă caracteristică WordPress: opțiuni. Opțiunile WordPress sunt modalități simple de a stoca biți de date împreună cu identificarea numelor. Adăugarea, ștergerea și accesarea opțiunilor sunt la fel de simple precum următoarele funcții:
update_option ($ name, $ value)
- Adaugă sau actualizează o opțiune cu nume numele $
și valoarea valoarea $
.delete_option ($ name)
- Ștergeți o opțiune cu nume numele $
.get_option ($ name)
- Obțineți valoarea opțiunii asociată cu numele numele $
. Deși numărul nostru de abonați nu este din punct de vedere tehnic o valoare de configurare, utilizarea opțiunilor WordPress este una dintre cele mai convenabile metode - dacă nu cea mai convenabilă - pentru stocarea unor astfel de date simple. În consecință, pentru a stoca numărul de abonați, vom folosi update_option
metodă, care nu numai că va depăși valorile anterioare, ci va crea, de asemenea, opțiunea în primul rând:
// dacă un număr nu a putut fi găsit, nu actualizați //, în schimb, lipiți cu numărul anterior dacă ($ count! == false) update_option ('subscriber_count', $ count);
Funcția noastră este completă! După configurarea evenimentului, reluarea datelor prin intermediul API-ului FeedBurner și stocarea valorii dorite, tot ce trebuie să faceți este să ieșiți! Codul complet pentru funcția de programare și recuperare - pe care îl puteți plasa în funcțiile funcționale.php - poate fi găsit mai jos:
// programați evenimentul feedburner_refresh o singură dată dacă (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (timp (), 'zilnic', 'feedburner_refresh'); add_action ('feedburner_refresh', 'update_rss_subscriber_count'); funcția update_rss_subscriber_count () // găsiți urlul FeedBurner și obțineți datele de pe el // modificați [NAME] pe numele feedului dvs. FeedBurner $ url = 'https://feedburner.google.com/api/awareness/1.0/ ? GetFeedData uri = [NAME] '; $ date = @file_get_contents ($ url); // @ va suprasolicita erorile // foloseste o expresie regulata pentru a analiza datele $ regex = '% circulation =' (. *?) "%"; preg_match ($ regex, $ date, $ matches); // obține numărul rezultat dacă este disponibil $ count = false; dacă ($ meciuri && $ meciuri [1]) $ count = (int) $ matches [1]; // dacă un număr nu a putut fi găsit, nu actualizați //, în schimb, lipiți cu numărul anterior dacă ($ count! == false) update_option ('subscriber_count', $ count);
Numărul de abonați este acum doar o simplă funcție de apel în orice fișier de șablon:
echo get_option ('subscriber_count');
Numărul nostru de abonați RSS este acum optimizat; mai degrabă decât să fie recuperată pentru fiecare solicitare, este stocată în cache cu ajutorul WP-Cron, economisind timpul utilizatorilor și reducând utilizarea de lățime de bandă. Deoarece se activează numai atunci când site-ul nostru primește de fapt un vizitator, funcția noastră este leneșă - un termen care poate fi cu siguranță considerat bun în acest context. Dar, din păcate, am descoperit aici doar o aplicație a WP-Cron; restul depinde de tine.
Aveți propria aplicație inovatoare a WP-Cron? Împărtășește-i cu noi în comentarii!