Beschleunigen Sie Ihr WordPress, indem Sie benutzerdefinierte Abfragen mithilfe der Transienten-API zwischenspeichern
Oh Junge, der Titel hört sich unheimlich an, oder? Sie haben nichts zu befürchten, weil wir alles kaputt machen werden. Läuft Ihr Theme mit benutzerdefinierten WordPress-Abfragen, um zufällige Posts, beliebte Posts, aktuelle Posts usw. in der Seitenleiste oder anderswo anzuzeigen? Wenn ja, sollten Sie die Verwendung der WordPress-Übergangs-API zum Zwischenspeichern dieser Abfragen in Betracht ziehen, um den Ressourcenverbrauch zu reduzieren und die Ladezeit zu verkürzen. In diesem Artikel zeigen wir Ihnen, wie Sie Ihre WordPress-Site beschleunigen können, indem Sie benutzerdefinierte Abfragen mithilfe der Transients-API zwischenspeichern.
Hinweis: Sie müssen wissen, wie WordPress-Themes funktionieren (Schleifen usw.), damit Sie diesem Beitrag folgen können.
Diese ganze Caching- und Transient-Sprache geht also über meinen Kopf. Machen Sie sich keine Sorgen, lassen Sie uns erklären, was es bewirkt. Wenn Sie eine Site wie List25 betreiben und über eine Schleife verfügen, die 6 zufällige Posts in Ihrer Seitenleiste anzeigt, kann eine vorübergehende API Abhilfe schaffen. Jedes Mal, wenn ein Benutzer die Seite aktualisiert, wird diese benutzerdefinierte WP-Abfrage in Ihrer Datenbank abgelegt und nach Belieben 6 Beiträge abgerufen. Wenn Sie eine relativ neue Website sind, sollte es nicht so schlimm sein. Wenn Sie jedoch VIELE Personen auf Ihre Site bringen, kann dies zum Absturz des SQL-Servers führen und der Bildschirm „Fehler beim Aufbau der Datenbankverbindung“ wird angezeigt. Durch das Hinzufügen einiger zusätzlicher Codezeilen können Sie die Ergebnisse dieser Abfrage mithilfe der Transients-API problemlos für einen bestimmten Zeitraum speichern (zwischenspeichern).
Beispiel für den Schleifencode, den wir zum Abrufen von zufälligen Beiträgen hatten:
have_posts ()): $ random_query-> the_post (); ?>
Der coolste Teil unserer Abfrage nach zufälligen Beiträgen in der Seitenleiste war, dass jedes Mal neue Inhalte angezeigt wurden. Wenn Sie also die Abfrage 12 Stunden im Cache speichern, haben wir dieselben 6 Beiträge für 12 Stunden, oder? Nun, wir haben dank des Vorschlags unseres Freundes Konstantin Kovshenin (@kovshenin) eine Lösung gefunden. Er schlug vor, anstelle von WP_Query get_posts zu verwenden und stattdessen 20 Beiträge zu ziehen. Zwischenspeichern Sie die Ergebnisse dieser Abfrage mithilfe der Transienten-API, und verwenden Sie dann die Funktion array_rand (), um nur noch 6 Einträge aus den ursprünglichen 20 zufällig anzuzeigen. Auf diese Weise können wir den zufälligen Effekt auf der Website simulieren.
Als erstes haben wir den Übergang festgelegt. Wir haben den Code von der WordPress-Codex-Seite erhalten.
// Eine vorhandene Kopie unserer Transientendaten abrufen, wenn (false === ($ special_query_results = get_transient ('special_query_results'))) // nicht vorhanden ist. Generieren Sie also die Daten neu und speichern Sie das transiente $ randargs = array ( 'orderby' => 'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12);
Beachten Sie, dass 60 * 60 * 12 der Bereich ist, in dem Sie die Länge des Caches steuern können. Fühlen Sie sich frei, es zu ändern, was Sie möchten. Wenn wir nun die $ special_query_results mit der foreach-Schleife anzeigen, werden alle 20 Beiträge angezeigt. Wir müssen also die Funktion array_rand () verwenden, um nur 6 Elemente zufällig abzurufen. Wir haben den Code wie folgt hinzugefügt:
$ randomposts = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
Jetzt werden 6 Post-IDs nach dem Zufallsprinzip aus unseren Übergangsdaten gezogen. Es werden jedoch nicht die Werte für jeden Beitrag abgerufen. Also mussten wir diese Bits hinzufügen:
$ 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]];
Grundsätzlich haben wir ein Array für $ sixposts erstellt, in dem wir jedem dieser Elemente einen Wert zuweisen. Ich bin nicht sicher, ob dies der beste Weg war, aber es hat funktioniert. Wenn einer von Ihnen bessere Vorschläge hat, können Sie ihn gerne in den Kommentaren posten.
Danach können wir die Schleife anzeigen. Einfach den Code so eingeben:
global $ post; // erforderlich, damit foreach funktioniert ($ sixposts als $ post): setup_postdata ($ post); // Alle Artikel gehen hierher. endforeach;
Mit setup_postdata können Sie alle Loop-Tags in dieser foreach-Schleife verwenden, z. B. the_permalink etc.
Um es für alle einfach zu machen, hier der endgültige Code, den wir haben:
'rand', 'numberposts' => 20); $ special_query_results = get_posts ($ randargs); set_transient ('special_query_results', $ special_query_results, 60 * 60 * 12); // Verwenden Sie die Daten wie gewohnt… $ 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 als $ post): setup_postdata ($ post); ?>
Tja, jetzt stellen Sie diese DB-Abfrage nur einmal alle 12 Stunden ab, unabhängig davon, wie viele Benutzer Ihre Site besuchen.