2014-07-10 14 views
1

我是一个很奇怪的问题。我使用Wordress 3.9.1和管理员的插件,我有这样的代码:wp_schedule_single_event是否创建多个事件?

function do_this_event_now() { 
    for ($i = 0; $i < 5; $i++) 
    { 
     $my_post = array(
      'post_title' => 'My post: '. date('Y-m-d H:i:s'), 
      'post_content' => 'This is my post.', 
      'post_status' => 'publish', 
      'post_author' => 1, 
      'post_category' => array(1) 
     ); 

     // Insert the post into the database 
     wp_insert_post($my_post); 

     sleep(50); 
    } 
} 

add_action('my_new_event', 'do_this_event_now'); 

wp_schedule_single_event(time(), 'my_new_event'); 

应该建立一个各后50秒。但结果很奇怪。

我正确地看到5个职位,但标题(其中我写的date('Y-m-d H:i:s'))是真的错了:

My post: 2014-07-10 15:14:57 
My post: 2014-07-10 15:15:47 
My post: 2014-07-10 15:16:01 
My post: 2014-07-10 15:16:38 
My post: 2014-07-10 15:16:51 

正如你所看到的差异不是50秒!

这怎么可能?这是一个单独的事件为什么这个奇怪的结果?

谢谢!

回答

0

与大多数系统管理员习惯的cron不同,WP-Cron不是基于服务器的时钟甚至服务器本身。相反,每次有人打电话给您的某个网页或帖子时都会有一张支票。每次WordPress开始呈现页面时,它都会检查是否有任何需要使用WP-Cron运行的作业。如果您的网站没有经常访问(像大多数开发网站一样),那么您的帖子将不会每隔50秒创建一次。你可以按照这样的指导来改变它:http://www.kettlewellconsulting.com/2013/06/23/reliably-schedule-wordpress-tasks/关闭默认的WP-Cron并实现你自己的cron作业,所以它会不断创建这些帖子,如你所愿。

+0

是的我明白你的意思......但是我在这里执行钩子一次,然后我在一个循环中创建帖子而不安排其他事件。所以我不明白原因..当它开始时,应该每隔50秒创建一个帖子(在睡眠(50)后没有? – Dail

+0

@Dail同样的规则仍然适用。仅仅因为你使用'wp_schedule_single_event'并不意味着它会始终按照您的意愿运行,因为您有50秒的等待期,脚本会等待被告知再次运行,您需要有人访问该站点,否则您需要一些东西来为您模拟,例如我用上面的链接解释过。 – michaelrmcneill

相关问题