2016-11-17 19 views
2

我想運行一個後臺腳本使用wp_schedule_single_event在用戶操作上觸發,儘管我已確認該事件正在計劃中,並且該wp_cron可以識別計劃的時間已過,但它不會觸發事件處理程序。爲了進一步複雜化,代碼在我的本地WP安裝上運行良好,但在我的服務器上沒有任何操作。wp_cron計劃但沒有解僱

要安排的情況下,我使用:

if (! wp_next_scheduled('my_action_name')) { 
    wp_schedule_single_event(time(), 'my_action_name'); 
} 

我的處理動作被定義爲:

add_action('my_action_name', 'my_action_handler'); 
function my_action_handler() { 
    // do stuff 
} 

我已經測試WP核心文件,發現下面的塊(從WP -includes/cron.php:322)是腳本終止的地方:

var_dump('test1'); 
$cron_request = apply_filters('cron_request', array(
    'url' => add_query_arg('doing_wp_cron', $doing_wp_cron, site_url('wp-cron.php')), 
    'key' => $doing_wp_cron, 
    'args' => array(
     'timeout' => 0.01, 
     'blocking' => false, 
     /** This filter is documented in wp-includes/class-wp-http-streams.php */ 
     'sslverify' => apply_filters('https_local_ssl_verify', false) 
    ) 
), $doing_wp_cron); 
var_dump('test2'); //exit here to test 
wp_remote_post($cron_request['url'], $cron_request['args']); 

在我的本地機器上,過濾器被應用,'test2'被打印,腳本可以繼續調用wp_remote_post。然而,在服務器上,腳本在執行apply_filter('cron_request'),打印'test1'而不是'test2'並且未能到達wp_remost_post時終止。

我一直無法找到此過濾器的來源進一步調試。 Wordpress.org說過濾器是在wp-includes/cron.php中定義的,並且我已經引用過的一個實例是它唯一應用的地方,但是,使用Sublime多文件搜索顯示字符串'cron_request'僅在我引用的過濾器應用程序中出現。

我已經閱讀了許多關於wp_cron失敗的帖子,除了非描述性的'服務器配置阻塞wp_cron'的答案外,沒有找到任何幫助。有關什麼類型的服務器配置或其他什麼可能在這裏發生的附加信息?

+0

是您的遠程服務器中,可能會給線索日誌創建任何錯誤? –

回答

-2

如果有人訪問您的WordPress網站,如果預定時間已過,此操作將觸發。

也許你可以使用

wp_schedule_event() 

而不是

wp_schedule_single_event()