我有一個網站,我需要每天從外部URL導入數據,所以我做了一個插件來處理這個問題。到目前爲止這麼好,但事情是,我的cron事件不起作用。我安裝了Crontrol插件來測試事件,但沒有任何反應。我在列表中看到我的鉤子名稱,但是當我點擊'立即運行'時,我收到一條消息,說明cron事件已成功執行,但數據未導入。Cron事件不會在自定義WordPress插件中執行
我已經通過很多recoursesonline(例如)進行了搜索,但不知何故,其他地方發佈的所有解決方案似乎都不適用於我。我必須在某個地方錯過一步。
該插件被稱爲進口數據和wp-content/plugins/import-data/
我有進口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');
我知道,因爲我測試前的輸出,當我手動運行fetchDetails()
工作方法(我我們在import_data()
上添加了一個簡碼,並在演示頁面上使用了這個簡碼)數據被導入,但上面的cron設置沒有。
在functions.php中只有管理頁面設置。
這是我在Wordpress插件開發世界的第一步,所以我可以想象我錯過了一個重要的鉤子或過濾器(或其他),但我只是無法找到它是什麼。也許一些初始化?
不幸的是,同結果如我:沒有任何反應。我有你提到的插件(WP Crontrol)安裝,我看到事件發生在那裏,但是當我點擊現在運行幾次什麼都得不到導入。當我添加'add_shortcode('ip_test_output','ip_do_import_data');'到import-data.php的底部,然後'['ip_test_output]'到測試頁面時,數據在我進入測試頁面時被導入。 – Maurice
確保WordPress正在運行您的cron功能,然後您需要停用並重新激活您的cron事件插件才能安排。您可以通過訪問http://yourdomain.com/wp-cron.php?doing_wp_cron手動激活wp cron環境 - 如果計劃了任何活動,它們將會激活。您需要開始調試代碼以查看失敗。 – MrZiggyStardust
我嘗試了上面的插件,但我刪除了所有'require_once()'和事件代碼,並添加了一個簡單的'wp_mail()'調用。在WordPress 4.6.1中,事件被添加,我得到我的測試電子郵件確認其工作。確保預定的事件是:'ip_import_data'而不是:'import_data' – MrZiggyStardust