2012-03-25 16 views
1

Ich versuche, einen Cron-Job in meinem Wordpress-Blog zu implementieren. Ich möchte diese Sachen in einem Plugin tun, für die Prüfung Ich versuche alle 10 Minuten in einer Datei einige Protokollinformationen zu schreiben, für die tun, dass ich diesen Code (PHP) schrieb:Cron und WordPress funktionieren nicht. Was habe ich vergessen?

add_filter('cron_schedules', 'ten_minute_prefix'); 
function ten_minute_prefix($schedules) 
{ 
    $schedules['tenmins'] = array(
     'interval' => 600, 
     'display' => __('10 minutes'), 
    ); 
    return $schedules; 
} 

//This must be here always 
add_action('my_task_hook', 'foo_task'); 
function foo_task() 
{    
    file_put_contents('data.txt', date("Y-m-d H:i:s") . "task do it\r\n", FILE_APPEND); 
} 

//This is executing in my plugin page in tools section 
function myplugin() 
{ 
    //For checking permissions 
    file_put_contents('data.txt', date("Y-m-d H:i:s") . "Task begin\r\n", FILE_APPEND);  
    wp_schedule_event(time(), 'tenmins', 'my_task_hook'); // hourly, daily and twicedaily 
    echo "SCHEDULE ACTION"; 
    ... 
} 

Zur Überprüfung, dass i habe wirklich den Cron-Job erstellt, ich benutze zum Beispiel dieses Plugin http://wordpress.org/extend/plugins/cron-view/. Dieses Plugin sagt mir das "Eintrag # 10: mein_task_hook √ Aktion existiert".

Aber nichts passiert, die Datei ist nicht geschrieben, was ist das Problem?

Edit:

ich eine Zeile in myplugin Funktion hinzugefügt haben zu sehen, ob ich die Berechtigung für Dateien zu schreiben. In der Tat, ich habe Berechtigungen, eine Datei data.txt wird in WP-Admin/Ordner erstellt.

Edit2:

ich die Cron-Jobs in Wordpress einfach zu verstehen!

Cron in WordPress ist kein echtes Cron, es wird nur ausgelöst, wenn ein Benutzer die Webseite öffnet, wenn niemand die Seite öffnet, wird der Prozess nicht ausgelöst. Also, wenn ein Blog keine Besucher hat, funktionieren Cron-Jobs nicht.

Bitte korrigieren Sie mich, wenn ich einen Fehler habe.

Antwort

0

Es könnte sein, weil Sie keine Schreibberechtigungen zum Schreiben in den Ordner haben, in dem sich data.txt befindet. Da Sie nicht explizit definiert haben, in welchen Ordner geschrieben werden soll, wird in den Ordner Ihrer PHP-Datei geschrieben in.

+0

Ich habe die Frage bearbeitet, ich denke, dass ich die richtigen Berechtigungen habe. – dlopezgonzalez

0

1) richtig. check ist Ihr Verzeichnis beschreibbar ...

if (is_writable(dirname(__FILE__))){ 
    file_put_contents(dirname(__FILE__).'/data.txt', date("Y-m-d H:i:s") . "task do it\r\n", FILE_APPEND); 

} else { 
    mail('[email protected]', 'oops!', 'error writing'); 
} 

2) wo ist Ihre cron scheldule aktiviert?

add_action('activate_' . __FILE__, 'plugin_activate_demo'));  
add_action('deactivate_' .__FILE__, 'plugin_deactivate_demo')); 
function plugin_activate_demo(){ 
    wp_schedule_event(time(), 'tenmins', 'my_task_hook'); 
} 

function plugin_deactivate_demo(){ 
    wp_clear_scheduled_hook('my_task_hook'); 
} 

3) fast imposible Situation, die ich auf der Arbeit bekam - Überprüfen Sie tun Sie cron haben arbeiten ... einfach per Post oder so etwas zu Ihrem hook_action Code hinzufügen. auf einigen Servern aufgrund DNS-Probleme (viele Netzwerk-Server und URL-Routen Problem) Server-Name nicht reagiert, während http://yourservername.com angefordert (von WP-Cron).

+0

Vielen Dank für Ihre Antwort. Ich habe Berechtigungen für das Schreiben der Datei, denn wenn ich diese Zeile: file_put_contents ('data.txt', Datum ("Y-m-d H: i: s"). "Aufgabe beginnen \ r \ n", FILE_APPEND); In der Funktion myplugin() kann ich die Datei data.txt in meinem Ordner sehen. – dlopezgonzalez

+0

schön zu sehen, dass hook_works und bewiesen. als Ort der Schreibdatei immer besser, einen vollständigen Pfad zur Datei anzugeben ... wie im obigen Beispiel - 'dirname (__ FILE __). '/ File.txt'' – Butuzov

Verwandte Themen