Fremskynde WordPress ved å cache tilpassede søk ved hjelp av Transients API
O gutt, tittelen lyder skummelt, gjør det ikke. Du har ingenting å bekymre deg fordi vi vil bryte det hele ned. Blir temaet ditt tilpasset WordPress-spørringer for å vise tilfeldige innlegg, populære innlegg, siste innlegg etc i sidefeltet eller andre steder? Hvis ja, bør du vurdere å bruke WordPress-forbigående API for å cache disse spørringene for å redusere ressursforbruket, samt å hjelpe belastningstiden. I denne artikkelen vil vi vise deg hvordan du kan øke hastigheten på WordPress-nettstedet ditt ved å cache tilpassede søk ved hjelp av Transients API.
Merk: Du må forstå hvordan WordPress-temaer fungerer (looper osv.), Slik at du kan følge dette innlegget.
Så dette hele caching og forbigående lingo går over hodet mitt. Vel, ikke bekymre deg, la oss forklare hva det gjør. I utgangspunktet hvis du kjører et nettsted som List25 og har en sløyfe som viser 6 tilfeldige innlegg i sidebjelken, kan transient API hjelpe. Hver gang en bruker oppdaterer siden, vil den tilpassede WP-spørringen du har, gå inn i databasen din og trekke 6 innlegg tilfeldig. Hvis du er et relativt nytt nettsted, bør det ikke være så ille. Men hvis du får mange mennesker til nettstedet ditt, kan det krasje din SQL-server, og du vil se skjermbildet Feil etablering av databaseforbindelse. Ved å legge til noen ekstra kodelinjer, kan du enkelt lagre resultatene av det spørringen (cache det) i en bestemt periode ved hjelp av Transients API.
Eksempel på sløyfekoden vi hadde for å trekke tilfeldige innlegg:
have_posts ()): $ random_query-> the_post (); ?>
Den kuleste delen om vår tilfeldige innleggssøke i sidelinjen var at det viste nytt innhold hver gang. Så ved å cache spørringen i 12 timer, vil vi ha de samme 6 innleggene som vises i 12 timer rett? Vel, vi fant et arbeid på grunn av forslag fra vår venn Konstantin Kovshenin (@kovshenin). Han foreslo at i stedet for å bruke WP_Query bruker vi get_posts og trekker 20 innlegg i stedet. Cache resultatene fra det spørringen ved hjelp av transient-API, og bruk deretter array_rand () -funksjonen til å bare vise 6 innlegg ut av den opprinnelige 20. På den måten kan vi fortsette å simulere tilfeldig effekt på nettstedet.
Første ting vi gjorde var satt forbigående. Vi har koden fra WordPress Codex-siden.
// Få en eksisterende kopi av våre forbigående data hvis (false === ($ special_query_results = get_transient ('special_query_results'))) // Det var ikke der, så regenerere dataene og lagre forbigående $ randargs = array 'orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12);
Legg merke til 60 * 60 * 12 er området der du kan kontrollere lengden på cachen. Du er velkommen til å endre den til hva du vil. Nå, hvis vi viser $ special_query_results ved hjelp av foreach loop, vil vi få alle 20 innleggene vist. Så vi trenger å bruke array_rand () -funksjonen til å bare trekke 6 elementer tilfeldig. Vi la til koden slik:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Nå vil dette trekke ut 6 post-IDer tilfeldig fra våre forbigående data. Det vil imidlertid ikke trekke verdiene for hvert innlegg. Så vi måtte legge til disse bitene med kode:
$ sixposts [0] = $ randomposts [$ randkey [0]]; $ sixposts [1] = $ randomposts [$ randkey [1]]; $ sixposts [2] = $ randomposts [$ randkey [2]]; $ sixposts [3] = $ randomposts [$ randkey [3]]; $ sixposts [4] = $ randomposts [$ randkey [4]]; $ sixposts [5] = $ randomposts [$ randkey [5]];
I utgangspunktet opprettet vi en serie for $ sixposts der vi tilordner en verdi til hver av disse elementene. Ikke sikker på om dette var den beste måten å gå om det, men det virket. Hvis noen av dere har bedre forslag, så vær så snill å legge det inn i kommentarene.
Etter å ha gjort det, er vi nå klare til å vise sløyfen. Bare sett koden slik:
global $ post; // kreves for at den skal fungere ($ sixposts som $ post): setup_postdata ($ post); // Alle elementene går her. endforeach;
setup_postdata lar deg bruke alle loop-tagger i denne foreach-sløyfen som the_permalink etc.
For å gjøre det enkelt for alle, her er den endelige koden vi har:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); // Bruk dataene som du ville ha normalt ... $ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6); $ sixposts [0] = $ randomposts [$ randkey [0]]; $ sixposts [1] = $ randomposts [$ randkey [1]]; $ sixposts [2] = $ randomposts [$ randkey [2]]; $ sixposts [3] = $ randomposts [$ randkey [3]]; $ sixposts [4] = $ randomposts [$ randkey [4]]; $ sixposts [5] = $ randomposts [$ randkey [5]]; global $ post; foreach ($ sixposts som $ post): setup_postdata ($ post); ?>
Ta da, nå gjør du bare denne DB-spørringen en gang i tolv timer, uansett hvor mange brukere som besøker nettstedet ditt.