
WordPress besitzt einen eigenen Cron und bestimmte Themen automatisiert und zeitgesteuert laufen zu lassen. Dabei werden diverse Funktionen für die Nutzung des Cron von WordPress zur Verfügung gestellt.
Im ersten Fall senden wir so zum Beispiel jede Stunde an Mail mit Hilfe der WordPress-Funktion wp_mail() raus. Diese Möglichkeit soll nur die Funktion darstellen, nicht zum Nachmachen anregen!
Im Standard kann WordPress mit drei Zeitschlüsseln umgehen, die man der Funktion wp_schedule_event mitgeben muss.
// send automatic scheduled email
if ( !wp_next_scheduled('my_task_hook') ) {
wp_schedule_event( time(), 'hourly', 'my_task_hook' ); // hourly, daily and twicedaily
}
function my_task_function() {
wp_mail('example@yoursite.com', 'Automatic mail', 'Hello, this is an automatically scheduled email from WordPress.');
}
add_action('my_task_hook', 'my_task_function');
Wer den Cron nutzt, sei es im Plugin oder Theme, der sollte nicht vergessen, den Cron auch zu deaktivieren, wenn man ihn nicht mehr benötigt.
// clean the scheduler
function my_task_deactivate() {
wp_clear_scheduled_hook('my_task_hook');
}
delete_action( 'my_task_hook', 'my_task_deactivate' );
Nicht immer reichen die Vorgabewerte für die zeitliche Steuerung und so kann man auch diese via Filter erweitern.
// add custom time to cron
function filter_cron_schedules( $param ) {
return array( 'once_half_hour' => array(
'interval' => 1800, // seconds
'display' => __( 'Once Half an Hour' )
) );
}
add_filter( 'cron_schedules', array( &$this, 'filter_cron_schedules' ) );
Ich denke es ist ganz wichtig zu erwähnen das es sich beim WP-Cron um keinen "echten" Cron ist. Die WP-Cronjobs werden nur dann ausgeführt, wenn jemand das Blog besucht (im Gegensatz zum "echten" Cronjob der auch tatsächlich zur eingestellten Zeit ausgeführt wird).
Sollte aus irgend einem Grund mal niemand das Blog besuchen, z.B. weil es sich um ein "geheimes" Testblog handelt, dann sollte man sich auch nicht wundern warum die WP-Cronjobs nicht funktionieren.
@Ralf: definitiv richtig; sie werden nur ausgeführt, wenn man im Backend oder Frontend einen Besuch verzeichnet. Da meine kleine Kalenderaktion etwas schmal im Inhalt ist, habe ich dazu nichts hinterlegt - daher nochmal Danke.
Super,
danke für den Tipp.
Ich habe ein Plugin, das ganz klar zu häufig läuft und zuviel "Power" abzweigt, da es nicht auf den Cronjob aufsetzt.
Jetzt werde ich es erweitertn: Old Post Spinner
Hallo zusammen, wenn der WP-Cronjob nur ausgeführt wird, wenn jemand die Seite besucht, kann ich doch einfach einen Cronjob einrichten, der jede Stunde meine Seite aufruft, oder?
@Benjamin: Ja kannst du, aber dann kannst du auch gleich einen richtigen Cron einrichten.