Do-It-Yourself-WordPress-Planung WP-Cron beherrschen

WP-Cron wird von den Entwicklern oft als eine der weniger verbreiteten WordPress-Funktionen missachtet. Ihre Anwendungen sind jedoch keine lachende Angelegenheit. Von der Zwischenspeicherung über Benachrichtigungen bis hin zum Bereinigen kann das Planen von cron-Aufträgen auch in den einfachsten WordPress-Blogs einen deutlichen Vorteil bewirken. Machen Sie mit und entdecken Sie wichtige Anwendungen dieses Systems.


Nur ein durchschnittlicher Cron-Job? Denk nochmal.

WP-Cron ist nicht dasselbe wie der Unix-Cron-Scheduler?

Gleich nachdem ich das Wort gesehen habe Cron, Ich bin mir sicher, dass Sie einen Punkt eingeschlagen haben, wo wir hinwollen: Planen Sie perfekt geplante Ereignisse, die in bestimmten Intervallen ausgeführt werden. Im Gegensatz dazu ist WP-Cron nicht das gleiche wie der Unix-Cron-Scheduler. Der Hauptunterschied liegt in der Ausführung. Im Gegensatz zu einem Hintergrundprozess tritt WP-Cron jedes Mal ein, wenn ein Besucher Ihre WordPress-basierte Website öffnet. Als solches behält es die entscheidende Eigenschaft eines ungenauen Timings bei.

Ja, du hast richtig gelesen: ungenaues Timing. Obwohl die Wörter Cron und Genauigkeit wie zwei Erbsen in einer Schote sind, harmonieren sie nicht mit dem WordPress-System. Aber ist das wirklich ein Problem? Wenn dies im Kontext des Benutzers betrachtet wird, wird dies tatsächlich zu einem Vermögenswert.

Nehmen wir das Beispiel eines normalen Cron-Jobs, der alle fünf Minuten ausgeführt wird, um einige Datenbankinformationen zu aktualisieren, die auf einer Website verwendet werden. Wenn 40 Minuten lang keine Besucher die Site besuchen, was ist der Sinn, diesen Job acht Mal auszuführen? Alle Zwischenwerte wären sowohl veraltet als auch ungenutzt. Wenn es nach dem ersten Benutzerbesuch nach mindestens fünf Minuten einspringen würde, würde dies nicht nur dieselbe Aufgabe erfüllen, sondern auch unnötige Aktualisierungen verhindern. Mit anderen Worten, da WP-Cron auf dem Benutzer basiert, hat es den Vorteil, dass es nur dann läuft, wenn Besucher anwesend sind.


Nicht um den heißen Brei schlagen. Zeige mir!

Um WP-Cron anzuwenden, betrachten wir die häufig verwendete RSS-Verwaltungsanwendung FeedBurner. Eine der beliebtesten Funktionen dieser Anwendung ist bei weitem die Fähigkeit, RSS-Abonnenten zu zählen. Nach der Indizierung kann auf die Teilnehmerzahl einer Site über einen einfachen API-Aufruf zugegriffen werden. Daraus folgt, dass dieser API-Aufruf einmal pro Seitensicht ausgeführt werden kann, um die Anzahl der Abonnenten an die Zuschauer zu übermitteln. Dies führt jedoch zu einem Problem.


Betreten Sie die Welt des Zwischenspeichers

Wenn auf die API von FeedBurner einmal pro Seitenzugriff zugegriffen wird, führt dies zwangsläufig zu einer zusätzlichen HTTP-Anforderung - von jeder anderen Domäne ganz zu schweigen - für jeden Besucher. Dies erhöht die Seitenladezeit für Benutzer.

Um diesem Problem entgegenzuwirken, ist es wichtig, eine wichtige Erkenntnis über diese Bereitstellungsmethode zu ziehen: Die Anzahl der RSS-Abonnenten wird wahrscheinlich nicht bei jeder einzelnen Ansicht der Seite aktualisiert. Tatsächlich aktualisiert FeedBurner nur einmal pro Tag. Ist es wirklich notwendig, für jeden Besucher die letzte Zählung anzuzeigen, auch wenn sich dies schnell ändern würde? Ist es wichtig, dass die Zählung etwas veraltet ist, aber anschließend innerhalb eines Tages aktualisiert wird??

Für unsere Zwecke ist es völlig nutzlos, die RSS-Abonnentenzahl für jede Seitenansicht abzurufen. Wird es stattdessen für einen Besucher abgerufen, kann es einfach für zukünftige Besucher wiederverwendet werden. Nachdem ein Tag vergangen ist, kann eine Aktualisierung dieser Zählung vorgenommen werden. Ein solcher Vorgang wird als Caching bezeichnet. Nach der Aktualisierung wird der RSS-Abonnentenzähler für die spätere Verwendung zwischengespeichert und nicht neu berechnet, bis ein Tag vergangen ist. Damit betreten wir die Welt von WP-Cron.


Schritt 1 Durchsuchen Sie die Dokumentation

Um WP-Cron zu verstehen, ist es wichtig zu wissen, wo Dokumentation verfügbar ist. WordPress.org bietet Zusammenfassungen zu jeder Cron-Funktion in seinem Codex. Um unsere zuvor definierte Aufgabe abzuschließen, müssen wir uns die wp_schedule_event Funktion, die vier Parameter erfordert:

  • Zeit: Ein UNIX-Zeitstempel, der angibt, wann das Ereignis ausgelöst werden soll
  • Wiederholung: wie oft das Ereignis nach dem geplanten Zeitpunkt erneut ausgelöst werden soll
  • Hook: Ein Hook, über den beim Auslösen des Ereignisses Funktionalität hinzugefügt wird
  • Argumente: ein Array von Argumenten, die an alle Hook-Funktionen übergeben werden sollen (optional)

Unser Ereignis wird ausgelöst, wenn die aktuelle Uhrzeit die Zeit überschreitet, die für diese Funktion verstrichen ist, wie von einem zukünftigen Besucher der Website vorgegeben. Es wird dann basierend auf dem Wiederholungsparameter erneut ausgelöst, der stündlich, zweimal täglich, täglich oder nicht eingestellt werden kann. Es können auch benutzerdefinierte Wiederholungspläne definiert werden.

Um mit dem Ereignis fertig zu werden, wird ein Haken verwendet. Kurz gesagt, ein WordPress-Hook kann als Platzhalter für eine Aktion betrachtet werden. Aktionen können Hooks über WordPress zugewiesen werden. add_action Funktion. Um einen Funktionshandler dem angegebenen Hook hinzuzufügen, können Sie Folgendes aufrufen:

add_action ('hook_name', 'funktionsname');

Dabei sind hook_name und function_name jeweils der Name des Hooks und der Handhabungsfunktion.


Schritt 2 Aufruf der Funktion

Da FeedBurner einmal pro Tag aktualisiert wird, geben wir gemäß dem folgenden Code einen Tageszeitplan an:

wp_schedule_event (time (), 'daily', 'feedburner_refresh');

Beachten Sie, dass Zeit() ist der aktuelle UNIX-Zeitstempel in Sekunden. Bei Ausführung wird der Hook 'FeedBurner Update' sofort und dann einmal pro Tag ausgelöst. Wenn Sie dies einfach in unsere WordPress-Datei „features.php“ einfügen, würde dies für jede einzelne Seite ein neues Ereignis einplanen. Dies ist nicht unsere gewünschte Funktionalität. Wir möchten diese Veranstaltung nur einmal planen. Am einfachsten geht das, indem Sie einfach prüfen, ob die Veranstaltung bereits geplant ist. Dies kann durch die wp_next_terminiert Funktion, die false zurückgibt, wenn das Ereignis nicht in der Zukunft oder zum Zeitpunkt des nächsten Auslösers ausgelöst wird, andernfalls:

if (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (time (), 'daily', 'feedburner_refresh'); 

Wenn wir dieses Ereignis jemals außer Gefecht setzen müssen, ist es so einfach wie das Anrufen von wp_unschedule_event Funktion, die die gleichen Parameter übernimmt - für die Wiederholung - als wp_schedule_event. Beachten Sie, dass die verstrichene Zeit die Zeit des nächsten Auslösers sein muss, die über abgerufen werden kann wp_next_terminiert:

if (false! == ($ time = wp_next_scheduled ('feedburner_refresh'))) wp_unschedule_event ($ time, 'feedburner_refresh'); 

Wir können dieses Ereignis auch durch den Hook-Namen mit Hilfe von deaktivieren wp_clear_scheduled_hook Funktion. Beachten Sie, dass diese Alternative auch alle anderen Ereignisse entfernt, die denselben Hook verwenden.

wp_clear_scheduled_hook ('feedburner_refresh');

Schritt 3 Bereitstellen des Hakens

Jetzt, da unsere Veranstaltung geplant ist, müssen wir einen Handler hinzufügen:

add_action ('feedburner_refresh', 'update_rss_subscriber_count');

Dies setzt die benannte Funktion update_rss_subscriber_count einmal genannt werden feedburner_refresh Hook wird ausgelöst. Es ist jetzt Zeit, diese Funktion zu schreiben.


Schritt 4 Abrufen der FeedBurner-Abonnentenanzahl

Abrufen der Teilnehmerzahl in der update_rss_subscriber_count Funktion können wir die FeedBurner-API über die URL aufrufen , Dabei ist [NAME] der Name unseres Feeds.

Dadurch werden XML-Daten in der folgenden Form zurückgegeben:

     

Die Informationen, nach denen wir suchen, befinden sich im Umlaufattribut. Der folgende reguläre Ausdruck kann die Daten für diesen Wert problemlos analysieren: Zirkulation = "(. *?)".

In englischer Sprache entspricht unser regulärer Ausdruck dem Folgenden:

  • Zirkulation = - Das Wort Zirkulation gefolgt von einem Gleichheitszeichen
  • "(. *?)" - Zitate und alles drin

Ausführen mit der preg_match Die Funktion ruft ein Array von Übereinstimmungen ab, das die Anzahl der Abonnenten an der ersten Indexposition enthält. Wenn Sie diese Informationen zusammenstellen, erhalten Sie folgenden Code:

// Finden Sie die FeedBurner-URL und rufen Sie die Daten ab. // Ändern Sie [NAME] in den Namen Ihres FeedBurner-Feeds. $ url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri= [ NAME]'; $ data = @file_get_contents ($ url); // @ unterdrückt Fehler // verwendet einen regulären Ausdruck, um die Daten zu analysieren $ regex = '% circulation = "(. *?)"%'; preg_match ($ regex, $ data, $ passend); // erhalte die resultierende Anzahl, falls verfügbar $ count = false; if ($ entspricht && $ stimmt mit [1] überein) $ count = (int) $ stimmt mit [1] überein;

Schritt 5 Speichern der Teilnehmerzahl

Nun, da wir die Teilnehmerzahl abgerufen haben, müssen wir sie für die Zugänglichkeit speichern. Anstatt die API-XML-Daten erneut aufzurufen, greifen Besucher lediglich auf diesen gespeicherten Wert zu.

Anstatt eine Datenbank oder Datei für Speicherzwecke anzulegen, können wir eine weitere WordPress-Funktion verwenden: Optionen. WordPress-Optionen sind einfache Methoden, um Datenbits zusammen mit Namen zu speichern. Das Hinzufügen, Löschen und Aufrufen von Optionen ist so einfach wie die folgenden Funktionen:

  • Aktualisierungsoption ($ name, $ value) - Fügt eine Option mit Namen hinzu oder aktualisiert sie $ name und Wert $ wert.
  • delete_option ($ name) - Löschen Sie eine Option mit Namen $ name.
  • get_option ($ name) - Rufen Sie den mit name verknüpften Optionswert ab $ name.

Obwohl unsere Abonnentenanzahl technisch gesehen kein Konfigurationswert ist, ist die Verwendung von WordPress-Optionen eine der bequemsten Möglichkeiten - wenn nicht die praktischste - zum Speichern solcher einfachen Daten. Um unsere Teilnehmerzahl zu speichern, verwenden wir daher die update_option Methode, die nicht nur vorherige Werte überschreibt, sondern auch die Option an erster Stelle erstellt:

// Wenn keine Anzahl gefunden werden konnte, aktualisieren Sie nicht // stattdessen. Bleiben Sie bei der vorherigen Anzahl. if ($ count! == false) update_option ('subscriber_count', $ count);

Unsere Funktion ist komplett! Nach dem Einrichten des Ereignisses, dem erneuten Abrufen der Daten über die FeedBurner-API und dem Speichern des gewünschten Werts bleibt nur noch die Ausgabe! Den vollständigen Code für die Zeitplanungs- und Abruffunktion, den Sie in functions.php platzieren können, finden Sie unten:

// Zeitplan des feedburner_refresh -Ereignisses nur einmal if (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (time (), 'daily', 'feedburner_refresh');  add_action ('feedburner_refresh', 'update_rss_subscriber_count'); Funktion update_rss_subscriber_count () // finde die FeedBurner-URL und rufe die Daten ab // ändere [NAME] in den Namen deines FeedBurner-Feeds $ url = 'https://feedburner.google.com/api/awareness/1.0/ GetFeedData? Uri = [NAME] '; $ data = @file_get_contents ($ url); // @ unterdrückt Fehler // verwendet einen regulären Ausdruck, um die Daten zu analysieren $ regex = '% circulation = "(. *?)"%'; preg_match ($ regex, $ data, $ passend); // erhalte die resultierende Anzahl, falls verfügbar $ count = false; if ($ entspricht && $ stimmt mit [1] überein) $ count = (int) $ stimmt mit [1] überein; // Wenn keine Anzahl gefunden werden konnte, aktualisieren Sie nicht // stattdessen. Bleiben Sie bei der vorherigen Anzahl. if ($ count! == false) update_option ('subscriber_count', $ count); 

Schritt 6 Ausgabe

Die Teilnehmeranzahl ist jetzt nur noch ein Funktionsaufruf in einer Vorlagendatei:

echo get_option ('subscriber_count');

Fazit

Unsere RSS-Abonnentenzahl ist jetzt optimiert. Statt für jede Anforderung abgerufen zu werden, wird sie mit Hilfe von WP-Cron zwischengespeichert, um den Benutzern Zeit zu sparen und die Bandbreite zu reduzieren. Da es nur aktiviert wird, wenn unsere Website tatsächlich einen Besucher empfängt, ist unsere Funktion faul - ein Begriff, der in diesem Zusammenhang durchaus als gut angesehen werden kann. Aber leider haben wir hier nur eine Anwendung von WP-Cron entdeckt. Der Rest liegt an dir.

Haben Sie Ihre eigene innovative Anwendung von WP-Cron? Teilen Sie es uns in den Kommentaren mit!