wp_schedule_single_event是否会创建多个事件?

时间:2014-07-10 15:31:30

标签: php wordpress wordpress-plugin

我是一个非常奇怪的问题。我正在使用Wordress 3.9.1,在管理员的插件中我有这个代码:

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秒!

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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