Ich habe eine Website, wo ich Daten täglich von einer externen URL importieren muss, so dass ich ein Plugin erstellt, um dies zu behandeln. So weit, so gut, aber die Sache ist, dass mein Cron-Event nicht funktioniert. Ich habe das Crontrol-Plugin installiert, um das Ereignis zu testen, aber nichts passiert. Ich sehe meinen Hook-Namen in der Liste, aber wenn ich auf "Jetzt ausführen" klicke, bekomme ich eine Nachricht, dass das Cron-Event erfolgreich ausgeführt wurde, aber die Daten werden nicht importiert.Cron-Ereignis wird nicht in benutzerdefinierten Wordpress-Plugin ausgeführt
Ich habe eine Menge von recoursesonline (zum Beispiel) durchsucht, aber irgendwie scheinen alle Lösungen woanders nicht für mich arbeiten. Ich muss irgendwo einen Schritt verpasst haben.
Das Plugin Import-Daten genannt und in wp-content/plugins/import-data/
ich habe Import-data.php:
<?php
/**
* Plugin Name: Import data
* Plugin URI:
* Description: Import data
* Version: 1.0.0
* Author:
* Author URI:
* License: GPL2
*/
// Block direct acces to file
defined('ABSPATH') or die();
// Include functions
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'functions.php';
// Include class
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'lib/class.import_data.php';
/**
* @desc iterate through all posts and update information
*/
function import_data(){
$wp_query = new WP_Query(
array(
'post_type' => 'post',
'post_status' => 'publish',
)
);
if($wp_query->have_posts()){
while($wp_query->have_posts()){
$wp_query->the_post();
$post_id = $wp_query->post->ID;
$external_id = get_field(trim(get_option('acfname_external_id')));
// Execute plugin
Import_Data::getInstance()->fetchDetails($external_id, $post_id);
}
wp_reset_postdata();
}
}
/**
* Set cron
*/
function my_event(){
if(!wp_next_scheduled('import_data')){
wp_schedule_event(time(), 'daily', 'import_data');
}
}
add_action('wp', 'my_event');
function unset_event(){
wp_clear_scheduled_hook('import_data');
}
register_deactivation_hook(__FILE__, 'unset_event');
Ich weiß, dass das Verfahren fetchDetails()
funktioniert, weil ich die Ausgabe getestet, bevor und wenn ich es manuell ausführen (i habe einen Shortcode zu import_data()
hinzugefügt und verwendet, dass auf einer Demo-Seite) die Daten importiert werden, aber die Cron-Einstellungen oben nicht.
In functions.php sind nur Einstellungen der Admin-Seite.
Dies sind meine ersten Schritte in der Welt der Plugin-Entwicklung für Wordpress, so dass ich Bild, dass ich einen wichtigen Haken oder Filter (oder was auch immer) vermisse, aber ich kann einfach nicht finden, was es ist. Vielleicht eine Initialisierung?
Leider das gleiche Ergebnis wie ich hatte: nichts passiert. Ich habe das Plugin, das Sie erwähnten (WP Crontrol), installiert und ich sehe das Ereignis, das dort auftritt, aber wenn ich auf "Jetzt ausführen" klicke, wird nichts importiert. Wenn ich add_shortcode ('ip_test_output', 'ip_do_import_data'); 'am Ende von import-data.php und dann' ['ip_test_output] 'zu einer Testseite hinzufüge, werden die Daten importiert, wenn ich auf die Testseite gehe. – Maurice
Stellen Sie sicher, dass WordPress Ihre Cron-Funktionen ausführt, dann müssen Sie Ihr Plug-in deaktivieren und erneut aktivieren, damit das Cron-Ereignis geplant wird. Sie können die wp cron-Umgebung manuell aktivieren, indem Sie Folgendes besuchen: http://yourdomain.com/wp-cron.php?doing_wp_cron - Wenn Ereignisse geplant sind, werden sie aktiviert. Sie müssen mit dem Debuggen Ihres Codes beginnen, um zu sehen, was fehlschlägt. – MrZiggyStardust
Ich habe das obige Plugin versucht, obwohl ich alle 'require_once()' und den Ereigniscode entfernt habe und stattdessen einen einfachen 'wp_mail()' Aufruf hinzugefügt habe. In WordPress 4.6.1 wird das Ereignis hinzugefügt und ich erhalte meine Test-E-Mail, die bestätigt, dass sie funktioniert. Stellen Sie sicher, dass das geplante Ereignis ist: 'ip_import_data' und nicht:' import_data' – MrZiggyStardust