WordPress Cron ist eine der nützlichsten Funktionen, die Sie lernen und verstehen möchten, ob Sie wie ich viel Zeit damit verbringen, mit WordPress zu arbeiten.
in der Lage, bestimmte Funktionen in einem engen Zeitplan auszuführen, ist für jedes CMS von wesentlicher Bedeutung und WordPress hat eine Reihe von Funktionen, die diesen Prozess sehr einfach und fast mühelos machen.
In diesem Artikel werde ich die folgenden WordPress Cron -Funktionen behandeln:Sie sind wahrscheinlich mit dem Begriff „Cron“ vertraut, da er sich auf den zeitbasierten Scheduler in UNIX-Systemen bezieht und obwohl WordPress 'Cron unterschiedlich ist. Die Hauptidee dahinter ist die gleiche.
Einige Beispiele dafür, wie WordPress das Cron -System intern verwendet
Wie unterscheidet sich WordPress Cron?WordPress 'Cron läuft, wenn eine Seite geladen wird, unabhängig davon, ob es sich um eine Front-End- oder Back-End-Seite handelt. Mit anderen Worten, wenn eine Seite auf Ihrer Website geladen wird, prüft WordPress, ob Aufgaben oder Ereignisse vorhanden sind, die sie ausführen und ausführen müssen. Wenn Sie denken, dass dies nicht ideal ist, haben Sie absolut Recht.
Wenn Sie zufällig eine Website haben, auf der nicht zu viel Datenverkehr erfolgt und Sie eine Aufgabe haben, die zu einem genauen Zeitpunkt ausgeführt werden muss, weiß WordPress nicht, dass die Aufgabe fällig ist, bis jemand Ihre Website besucht. Auch wenn es sich um einen Suchmaschinenbot handelt, der Ihre Website krabbelt.
Es gibt zwei Geschmacksrichtungen von Cron -Ereignissen, die Sie mit einigen Codezeilen planen können:
Planen eines wiederkehrenden Ereignisses müssen eine benutzerdefinierte „Aktion“ erstellen, die auch bei Cron registriert werden muss. Sobald der Cron ausgeführt wird, wird die an die zuvor erstellte benutzerdefinierte Funktion beigefügt.
Schauen wir uns das folgende Beispiel an, in dem wir täglich Post -Revisionen löschen.
Zuerst erstellen wir unsere benutzerdefinierte „Aktion“, die die Funktion, die wir ausführen möchten, angehängt haben, wenn der Haken von Cron aufgerufen wird.
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Für die Planung des wiederkehrenden Ereignisses verwenden wir die Funktion WP_Schedule_Event ($ timestamp, $ recurce, $ Hook, $ args), die 4 Argumente einnimmt:
Zuerst stellen wir sicher, dass die Veranstaltung vorher noch nicht geplant wurde, und wenn dies nicht der Fall ist, planen wir es.
<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled </span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span><span>}</span></span>
Beachten Sie, dass Sie einen Krawattenabschnitt zu einer Aktion hinzufügen können. Wenn Sie ein Plugin -Autor sind, können Sie das geplante Ereignis so einrichten, dass die Seite für Plugin -Optionen zum ersten Mal ausführt wird. Für ein viel einfacheres Beispiel werden wir es an WordPress 'init -Aktion binden.
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init </span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event'); </span></span><span> </span><span><span>// Function which will register the event </span></span><span><span>function register_daily_revision_delete_event() { </span></span><span> <span>// Make sure this event hasn't been scheduled </span></span><span> <span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span> <span>} </span></span><span><span>}</span></span>
Jetzt, da Sie wissen, wie Sie wiederkehrende Ereignisse planen, werfen wir einen Blick darauf, ein einzelnes Ereignis zu erstellen, das nie wieder ausgeführt wird, bis es verschoben wird.
So wie der Name schon sagt, ist ein einzelnes Ereignis ein einmal und stoppt dann. Dieses einzelne Ereignis kann bei Bedarf noch erneut verschoben werden.
Das Konzept dahinter ist das gleiche wie die wiederkehrenden Ereignisse. Zuerst registrieren Sie einen benutzerdefinierten Hook, der von Cron aufgerufen wird, wenn er auf dem Server ausgeführt wird. Sobald Cron den Haken anruft, wird seine Funktion ausgeführt und so erledigt Sie die Dinge.
als Beispiel werden wir ein Ablaufdatum für Beiträge festlegen. Beiträge verfallen 30 Tage nach der Veröffentlichung. Wir werden uns mit dem Publish_Post einversetzen, damit wir unser einzelnes Ereignis planen können, sobald der Beitrag veröffentlicht wird, und Count Down beginnt.
Einrichten der Funktion, die den Beitrag nach 30 Tagen löscht.
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Ziemlich einfach, oder? Jetzt müssen wir die Veranstaltung planen, sobald der Beitrag tatsächlich veröffentlicht wurde. Um diese Aufgabe zu erfüllen
<span><span><?php </span></span><span><span>// Make sure this event hasn't been scheduled </span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span><span>}</span></span>
Sie fragen sich vielleicht, warum Sie Ereignisse entfernen möchten? Es gibt einen guten Grund, insbesondere wenn Sie Ereignisse für Sortierplan in Ihre Plugins aufnehmen.
CRONS werden in der Tabelle WP_OPTIONS und durch einfaches Deaktivieren und Löschen Ihres Plugins gespeichert. WordPress wird immer noch versuchen, Ihre Veranstaltungen auszuführen, obwohl das Plugin nicht mehr verfügbar ist. Bitte stellen Sie jedoch sicher, dass Sie Ereignisse in Ihrem Plugin oder in Ihrer benutzerdefinierten Implementierung ordnungsgemäß nicht platzieren.
Croning-Ereignisse nicht platziert sind relativ einfach. Wir werden wp_next_scheduled () verwenden, um zu finden, wann das nächste Ereignis stattfindet, und nur dann können wir es mit wp_unschessel_event () nicht platzieren.
.
In Anbetracht unseres ersten Beispiels würden wir das Ereignis auf die folgende Art und Weise nicht festlegen.
<span><span><?php </span></span><span><span>// Add function to register event to WordPress init </span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event'); </span></span><span> </span><span><span>// Function which will register the event </span></span><span><span>function register_daily_revision_delete_event() { </span></span><span> <span>// Make sure this event hasn't been scheduled </span></span><span> <span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) { </span></span><span> <span>// Schedule the event </span></span><span> <span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' ); </span></span><span> <span>} </span></span><span><span>}</span></span>
Es ist möglich, benutzerdefinierte Cron -Intervalle festzulegen, die Sie bei der Planung von Ereignissen mit Cron verwenden können. Dazu müssen wir uns nur in den Cron_Schedules -Filter einbinden und unseren eigenen hinzufügen. Werfen wir einen Blick auf das Hinzufügen eines benutzerdefinierten Intervalls, das alle 10 Minuten ausgeführt wird.
<span><span><?php </span></span><span><span>// delete_post_revisions will be call when the Cron is executed </span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' ); </span></span><span> </span><span><span>// This function will run once the 'delete_post_revisions' is called </span></span><span><span>function delete_all_post_revisions() { </span></span><span> </span><span> <span>$args = array( </span></span><span> <span>'post_type' => 'post', </span></span><span> <span>'posts_per_page' => -1, </span></span><span> <span>// We don't need anything else other than the Post IDs </span></span><span> <span>'fields' => 'ids', </span></span><span> <span>'cache_results' => false, </span></span><span> <span>'no_found_rows' => true </span></span><span> <span>); </span></span><span> </span><span> <span>$posts = new WP_Query( $args ); </span></span><span> </span><span> <span>// Cycle through each Post ID </span></span><span> <span>foreach( (array)$posts->posts as $post_id ) { </span></span><span> </span><span> <span>// Check for possible revisions </span></span><span> <span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) ); </span></span><span> </span><span> <span>// If we got some revisions back from wp_get_post_revisions </span></span><span> <span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) { </span></span><span> </span><span> <span>foreach( $revisions as $revision_id ) { </span></span><span> </span><span> <span>// Do a final check on the Revisions </span></span><span> <span>if( wp_is_post_revision( $revision_id ) ) { </span></span><span> <span>// Delete the actual post revision </span></span><span> <span>wp_delete_post_revision( $revision_id); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
Mit WordPress 'Cron kann es nicht einfacher sein, und es ist ein sehr schönes und interessantes Werkzeug, das Ihnen sicher hilft, Ihr Plugin robuster zu machen. All diese Funktionen zu lernen und sie in die Praxis um die Anwendungen mit realen Welt zu bringen, ist der beste Weg, um WordPress 'Cron für die Planung von Ereignissen zu meistern.
Warum funktioniert mein WordPress -Cron -Job nicht? Job funktioniert nicht. Ein häufiges Problem ist ein Problem mit den Zeiteinstellungen des Servers. Wenn die Zeit des Servers nicht korrekt festgelegt ist, kann dies zu Planungsproblemen führen. Ein weiteres mögliches Problem ist ein Konflikt mit einem Plugin oder Thema. Einige Plugins oder Themen können das WordPress -Cron -System beeinträchtigen, was es zu Fehlfunktionen führt. Es ist auch möglich, dass Ihr Code ein Fehler gibt. Stellen Sie sicher, dass Sie Ihren Code gründlich testen und Ihre Servereinstellungen überprüfen, wenn Sie Probleme mit WordPress Cron Jobs haben.
Kann ich WordPress Cron verwenden, um Beiträge zu planen? WordPress selbst verwendet Cron Jobs, um geplante Beiträge zu verarbeiten. Wenn Sie einen Beitrag festlegen, der zu einem zukünftigen Datum veröffentlicht werden soll, plant WordPress einen Cron -Job, um den Beitrag zum angegebenen Zeitpunkt zu veröffentlichen. Kann alle geplanten WordPress -Cron -Jobs mit einem Plugin wie WP Crontrol anzeigen. Dieses Plugin bietet eine benutzerfreundliche Oberfläche, an der Sie alle geplanten Ereignisse, ihre Intervalle und ihre nächsten Laufzeiten sehen können. Sie können es auch verwenden, um Cron -Jobs hinzuzufügen, zu bearbeiten oder zu löschen.
Das obige ist der detaillierte Inhalt vonMastering WordPress Cron für die Planung von Veranstaltungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!