WordPress Cron nutzen

Um Funktionen automatisch in einem bestimmten Interval aufzurufen, kann man in WordPress die systemeigene Cron-Funktion benutzen.

Ich habe diese Funktion bei der Wetteranzeige auf unserer Homepage genutzt. Dort war die Aufgabe: Lade alle 20 Minuten die aktuellen Wetterdaten. Wie gemacht für einen Cron Job oder WordPress Cron.

Grundsätzlich ist die Cron-Funktion in WordPress kein Cron Job im eigentlichen Sinn. Ein Cron Job verrichtet seine Arbeit regelmäßig im vorgegebenen Interval (alle 10 Minuten, 30 Minuten etc.). Die Cron-Funktion in WordPress wird nur aufgerufen, wenn ein Besucher die Seite aufruft. Dann wird geschaut, wann die gewünschte Aktion das letzte Mal ausgeführt wurde und gegebenenfalls erneut ausgeführt. Besucht niemand die Seite, wird auch keine Aktion ausgeführt.

Das ist zugegeben etwas ungenau, aber für die oben erwähnte Aufgabe muss die Ausführung auch nicht exakt alle 20 Minuten passieren, sondern nur, wenn jemand die Seite besucht.

Der Umgang mit WP Cron ist eigentlich recht simple. Ich habe das mal beispielhaft in folgendem Gist zusammengefaßt:

In die erste Funktion „your_function“ schreibt Ihr die Aktion, welche im Cron ausgeführt werden soll und verknüft sie mit dem Action Hook „your_cron_action“ (die Benennung ist bespielhaft). Spannend wird es in der nächsten Function. Dort wird mit „wp_schedule_event“ eure Action dem WordPress Cron hinzugefügt. Da es für wp_schedule_event eigentlich nur drei Intervalle gibt (hourly, twicedaily, daily) habe ich mit der Funktion „custom_cron_schedules“ noch einen 20 minütigen Interval hinzugefügt.

Der Code-Schnipsel kommt in Eure functions.php im Theme oder Ihr schreibt ein entsprechendes Plugin.

Wenn Ihr im Admin-Bereich genauere Kontrolle über die laufenen Crons haben wollt, kann ich Euch das Plugin WP Crontrol empfehlen. Mit dem Plugin könnt Ihr Euren Hook auch gleich im Admin-Bereich initialisieren. Dann braucht Ihr die Zeilen 6-12 im Gist gar nicht.

Einen ausführlichen Artikel auf englisch gibt es beim Smashing Magazine:
» Schedule Events Using WordPress Cron by Jonathan Goldford