O boy, ang pamagat ay nakakatakot ay hindi ito. Wala kayong mag-alala dahil babali namin ang lahat. Ang iyong tema ay nagpapatakbo ng mga pasadyang mga query sa WordPress upang magpakita ng mga random na post, mga sikat na post, kamakailang mga post atbp sa sidebar o kahit saan pa? Kung oo, pagkatapos ay dapat mong isaalang-alang ang paggamit ng WordPress lumilipas API upang i-cache ang mga query na ito upang mabawasan ang pagkonsumo ng mapagkukunan pati na rin ang pagtulong sa oras ng pag-load. Sa artikulong ito, ipapakita namin sa iyo kung paano pabilisin ang iyong WordPress site sa pamamagitan ng pag-cache ng mga pasadyang query gamit ang Transients API.
Tandaan: Kailangan mong maunawaan kung paano gumagana ang mga tema ng WordPress (mga loop atbp), upang masundan mo ang post na ito.
Kaya ang buong caching at lumilipas na salita ay dumadaloy sa aking ulo. Well huwag mag-alala ipaalam sa amin ipaliwanag kung ano ang ginagawa nito. Karaniwang kung nagpapatakbo ka ng isang site tulad ng List25 at may isang loop na nagpapakita ng 6 random na mga post sa iyong sidebar, maaaring makatulong ang lumilipas na API. Sa bawat oras na magre-refresh ng isang user ang pahina, ang pasadyang WP Query na mayroon ka ay pupunta sa iyong database at hilahin ang 6 na post sa random. Kung ikaw ay isang medyo bagong site, hindi ito dapat na masama. Subalit kung nakakakuha ka ng LOT ng mga tao sa iyong site, maaari itong mag-crash ng iyong SQL server, at makikita mo ang screen na “Error sa Pagtatatag ng Koneksyon sa Database”. Sa pamamagitan ng pagdaragdag ng ilang dagdag na linya ng code, madali mong iimbak ang mga resulta ng query na iyon (cache ito) sa isang tiyak na tagal ng panahon gamit ang API ng Transients.
Halimbawa ng loop code na mayroon kami para sa paghawak ng mga random na post:
have_posts ()): $ random_query-> the_post (); ?>
Ang pinaka-cool na bahagi tungkol sa aming random na mga post na query sa sidebar ay nagpakita ito ng bagong nilalaman sa bawat oras. Kaya sa pamamagitan ng pag-cache ng tanong para sa 12 oras, magkakaroon kami ng parehong 6 na post na nagpapakita para sa 12 oras ng tama? Well, natagpuan namin ang isang trabaho sa paligid salamat sa mungkahi ng aming mga kaibigan Konstantin Kovshenin (@ kovshenin). Iminungkahi niya na sa halip na gamitin ang WP_Query, ginagamit namin ang get_posts at hinila ang 20 na post sa halip. I-cache ang mga resulta ng query na iyon gamit ang API ng mga transient, at pagkatapos ay gamitin ang array_rand () function upang ipakita lamang ang 6 na mga post sa orihinal na 20 nang random. Sa ganitong paraan maaari naming panatilihing gayahin ang random na epekto sa site.
Ang unang bagay na ginawa namin ay itinakda ang lumilipas. Nakuha namin ang code mula sa pahina ng WordPress Codex.
// Kumuha ng anumang umiiral na kopya ng aming lumilipas na data kung (false === ($ special_query_results = get_transient ('special_query_results'))) { / Hindi ito naroroon, kaya muling buhayin ang data at i-save ang lumilipas $ randargs = array ('orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); }
Pansinin ang 60 * 60 * 12 ay ang lugar kung saan maaari mong kontrolin ang haba ng cache. Huwag mag-atubiling baguhin ito sa kahit anong gusto mo. Ngayon kung ipinakita namin ang $ special_query_results gamit ang foreach loop, magkakaroon kami ng lahat ng 20 post na ipinapakita. Kaya kailangan naming magamit ang array_rand () function na lamang pull 6 item nang random. Idinagdag namin ang code na tulad nito:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Ngayon ito ay makakakuha ng 6 post ID nang random mula sa aming mga lumilipas na data. Gayunpaman, hindi ito kukunin ang mga halaga para sa bawat post. Kaya kailangan naming gawin idagdag ang mga piraso ng code na ito:
$ 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]];
Talaga kami ay lumikha ng isang array para sa $ sixposts kung saan kami magtalaga ng isang halaga sa bawat isa sa mga item na iyon. Hindi sigurado kung ito ay ang pinakamahusay na paraan ng pagpunta tungkol sa mga ito, ngunit ito ay nagtrabaho. Kung mayroon kang mas mahusay na mga mungkahi, huwag mag-atubiling i-post ito sa mga komento.
Pagkatapos ng paggawa nito, handa na kaming ipakita ang loop. Maglagay lamang ng code na tulad nito:
global $ post; / / kinakailangan para magtrabaho ito foreach ($ sixposts bilang $ post): setup_postdata ($ post); // Lahat ng mga item pumunta dito. endforeach;
Pinapayagan ka ng setup_postdata mong gamitin ang lahat ng mga tag ng loop sa loob ng foreach loop na ito tulad ng the_permalink atbp
Upang gawing madali para sa lahat, narito ang huling code na mayroon kami:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); } // Gamitin ang data na gusto mo normal ... $ 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 bilang $ post): setup_postdata ($ post); ?>
Sa ngayon, ngayon ay ginagawa mo lang ang tanong na DB na ito minsan sa bawat 12 oras gaano man karaming mga gumagamit ang bumibisita sa iyong site.