Accelerați-vă WordPress prin Cache Queries personalizate folosind API-ul Transients
Băiatul, titlul sună înfricoșător, nu-i așa? Nu ai de ce să-ți faci griji, pentru că o vom distruge. Tema dvs. rulează interogări personalizate WordPress pentru a afișa mesaje aleatoare, postări populare, postări recente etc. în bara laterală sau oriunde altundeva? Dacă da, atunci ar trebui să luați în considerare utilizarea API-ului tranzitoriu WordPress pentru a cache aceste interogări pentru a reduce consumul de resurse și pentru a ajuta timpul de încărcare. În acest articol, vă vom arăta cum să accelerați site-ul WordPress prin cache interogări personalizate utilizând API-ul Transients.
Notă: Trebuie să înțelegeți cum funcționează temele WordPress (bucle etc), pentru ca dvs. să urmați acest post.
Deci toată caching-ul și lingo-ul tranzitoriu trece peste capul meu. Ei bine, nu vă faceți griji să ne explicăm ce face. Practic, dacă rulați un site ca List25 și aveți o buclă care arată 6 postări aleatoare în bara laterală, atunci API tranzitorie vă poate ajuta. De fiecare dată când un utilizator reîmprospătează pagina, interogarea WP personalizată pe care o aveți va merge în baza dvs. de date și trage 6 posturi la întâmplare. Dacă sunteți un site relativ nou, nu ar trebui să fie așa de rău. Dar dacă primiți O mulțime de oameni pe site-ul dvs., atunci acesta poate să vă prăbușească serverul SQL și veți vedea ecranul "Eroare la stabilirea conexiunii la baza de date". Prin adăugarea câtorva linii suplimentare de cod, puteți stoca cu ușurință rezultatele acelei interogări (cache-ul) pentru o anumită perioadă de timp folosind API-ul Transients.
Exemplu de cod de buclă pe care l-am avut pentru a trage mesajele aleatoare:
have_posts ()): $ random_query-> the_post (); ?>
Cea mai tare parte despre interogarea noastră de postări aleatoare din bara laterală a fost că a arătat de fiecare dată un conținut nou. Deci, prin cache-ul interogării timp de 12 ore, vom avea aceleași 6 posturi afișate timp de 12 ore dreapta? Ei bine, am găsit o lucrare în jurul datorită sugestiei prietenului nostru Konstantin Kovshenin (@kovshenin). El a sugerat că, în loc să utilizeze WP_Query, vom folosi get_posts și vom trage 20 de posturi. Executați cache rezultatele acelei interogări folosind API tranzitorii și apoi utilizați funcția array_rand () pentru a afișa la întâmplare doar 6 posturi din originalul 20. În acest fel putem simula efectul aleatoriu pe site.
Primul lucru pe care l-am făcut a fost stabilirea tranziției. Am primit codul din pagina Codex WordPress.
// Obțineți orice copie existentă a datelor noastre tranzitorii dacă false === ($ special_query_results = get_transient ('special_query_results'))) // Nu a fost acolo, deci regenerați datele și salvați $ randargs = matrice ( 'orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12);
Observați că 60 * 60 * 12 este zona în care puteți controla lungimea cache-ului. Simțiți-vă liber să-l schimbați la ceea ce vă place. Acum, dacă vom arăta $ special_query_results utilizând buclă foreach, vom afișa toate cele 20 de postări. Așadar, trebuie să folosim funcția array_rand () pentru a trage numai 6 elemente la întâmplare. Am adăugat codul în felul următor:
$ randomposts = get_transient ("special_query_results"); $ randkey = array_rand ($ randomposts, 6);
Acum, acest lucru va scoate la iveală 6 ID-uri de la datele noastre tranzitorii. Cu toate acestea, nu va trage valorile pentru fiecare post. Așa că a trebuit să adăugăm acești biți de cod:
$ șaseposturi [0] = $ randomposts [$ randkey [0]]; $ șaseposturi [1] = $ randomposts [$ randkey [1]]; $ șaseposturi [2] = $ randomposts [$ randkey [2]]; $ șaseposturi [3] = $ randomposts [$ randkey [3]]; $ șaseposturi [4] = $ randomposts [$ randkey [4]]; $ șaseposturi [5] = $ randomposts [$ randkey [5]];
Practic, am creat o matrice pentru $ sixposts în care atribuim o valoare fiecăruia dintre ele. Nu e sigur dacă acesta a fost cel mai bun mod de a merge, dar a funcționat. Dacă vreunul dintre dvs. are sugestii mai bune, atunci nu ezitați să îl postați în comentarii.
După aceasta, suntem gata să afișăm bucla. Pur și simplu puneți codul în felul următor:
postare globală $; // necesar pentru a lucra foreach ($ sixposts ca $ post): setup_postdata ($ post); // Toate elementele merg aici. endforeach;
setup_postdata vă permite să utilizați toate etichetele bucla în interiorul acestui buclă foreach, cum ar fi the_permalink etc.
Pentru a face mai ușor pentru toată lumea, iată codul final pe care îl avem:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); // Utilizați datele ca în mod normal ... $ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6); $ șaseposturi [0] = $ randomposts [$ randkey [0]]; $ șaseposturi [1] = $ randomposts [$ randkey [1]]; $ șaseposturi [2] = $ randomposts [$ randkey [2]]; $ șaseposturi [3] = $ randomposts [$ randkey [3]]; $ șaseposturi [4] = $ randomposts [$ randkey [4]]; $ șaseposturi [5] = $ randomposts [$ randkey [5]]; postare globală $; foreach ($ sixposts ca $ post): setup_postdata ($ post); ?>
Da, acum faci această interogare DB o dată la fiecare 12 ore, indiferent cât de mulți utilizatori vizitează site-ul tău.