Velocizza il tuo WordPress memorizzando nella cache le query personalizzate utilizzando l'API Transients
O ragazzo, il titolo sembra spaventoso, non è vero? Non hai nulla di cui preoccuparti perché lo spezzeremo tutto. Il tuo tema esegue query personalizzate su WordPress per mostrare post casuali, post popolari, post recenti, ecc. Nella barra laterale o in qualsiasi altro luogo? In caso affermativo, dovresti prendere in considerazione l'utilizzo dell'API transitoria di WordPress per memorizzare queste query in modo da ridurre il consumo di risorse, oltre ad aiutare il tempo di caricamento. In questo articolo, ti mostreremo come velocizzare il tuo sito WordPress memorizzando nella cache le query personalizzate usando l'API Transients.
Nota: è necessario capire come funzionano i temi di WordPress (cicli, ecc.), Per poter seguire questo post.
Quindi questo intero gergo di caching e transitorio mi passa per la testa. Beh, non preoccuparti, spiegaci cosa fa. Fondamentalmente se si sta eseguendo un sito come List25 e si dispone di un ciclo che mostra 6 post casuali nella barra laterale, l'API transitoria può essere d'aiuto. Ogni volta che un utente aggiorna la pagina, quella Query WP personalizzata che avrai andrà nel tuo database e tirerà 6 post a caso. Se sei un sito relativamente nuovo, non dovrebbe essere così male. Ma se stai ricevendo MOLTE persone sul tuo sito, allora può mandare in crash il tuo server SQL, e vedrai la schermata "Errore che stabilisce la connessione al database". Aggiungendo alcune righe di codice aggiuntive, è possibile memorizzare facilmente i risultati di tale query (memorizzarlo nella cache) per un determinato periodo di tempo utilizzando l'API Transients.
Esempio del codice di loop che avevamo per estrarre i post casuali:
have_posts ()): $ random_query-> the_post (); ?>
La parte più interessante della nostra query di post casuali nella barra laterale è stata la visualizzazione di nuovi contenuti ogni volta. Quindi memorizzando la query per 12 ore, avremo gli stessi 6 post visualizzati per 12 ore, giusto? Bene, abbiamo trovato un lavoro in giro grazie al suggerimento del nostro amico Konstantin Kovshenin (@kovshenin). Ha suggerito che invece di usare WP_Query, usiamo get_posts e tiriamo invece 20 post. Memorizza in cache i risultati di tale query utilizzando l'API transients e quindi utilizza la funzione array_rand () per mostrare a caso solo 6 post dei 20 originali. In questo modo possiamo continuare a simulare l'effetto casuale sul sito.
La prima cosa che abbiamo fatto è stata impostare il transitorio. Abbiamo ottenuto il codice dalla pagina di WordPress Codex.
// Ottieni qualsiasi copia esistente dei nostri dati transitori se (false === ($ special_query_results = get_transient ('special_query_results'))) // Non c'era, quindi rigenera i dati e salva il transitorio $ randargs = array ( 'orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12);
Notare che il 60 * 60 * 12 è l'area in cui è possibile controllare la lunghezza della cache. Sentiti libero di cambiarlo in qualsiasi cosa ti piaccia. Ora se mostriamo $ special_query_results usando il ciclo foreach, avremo tutti i 20 post visualizzati. Quindi abbiamo bisogno di utilizzare la funzione array_rand () per estrarre solo 6 elementi a caso. Abbiamo aggiunto il codice in questo modo:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Ora questo estrarrà 6 post ID a caso dai nostri dati transitori. Tuttavia, non estrarrà i valori per ogni post. Quindi abbiamo dovuto aggiungere questo bit di codice:
$ 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]];
Fondamentalmente abbiamo creato un array per $ sixposts in cui assegniamo un valore a ciascuno di questi elementi. Non sono sicuro se questo fosse il modo migliore per farlo, ma ha funzionato. Se qualcuno di voi ha suggerimenti migliori, sentitevi liberi di postarlo nei commenti.
Dopo averlo fatto, siamo ora pronti per visualizzare il ciclo. Inserisci semplicemente il codice in questo modo:
$ globale post; // richiesto che funzioni foreach ($ sixposts come $ post): setup_postdata ($ post); // Tutti gli elementi vanno qui. endforeach;
setup_postdata ti consente di usare tutti i tag di loop all'interno di questo ciclo foreach come il_permalink ecc.
Per rendere più facile per tutti, ecco il codice finale che abbiamo:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); // Usa i dati come faresti normalmente ... $ 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]]; $ globale post; foreach ($ sixposts come $ post): setup_postdata ($ post); ?>
Ta da, ora stai facendo questa query DB solo una volta ogni 12 ore, indipendentemente da quanti utenti visitano il tuo sito.