如何确保WP-Cron工作循环通过所有帖子?

时间:2018-08-11 作者:Jeda Dragon

我正在使用WP Crontrol,每天运行一些CRON作业来检查帖子的年龄。如果帖子提前2天发布,则会被删除。

这是可行的,但由于某种原因,只有三天以上的帖子被删除了。还有一些仍在出版中。

这一定是因为网站上大约有3000个帖子。有没有办法让我的CRON工作更有效率?

以下是我运行的当前代码:

class EventsWPCron {

    public function __construct() {

        if ( ! wp_next_scheduled( \'trash_old_events\' ) ) {
            wp_schedule_event( time(), \'daily\', \'trash_old_events\' );
        }

        add_action( \'trash_old_events\', array( $this, \'delete_events\' ) ); 

    }

    public function delete_events() {
        $args = array(
            \'post_type\' => \'event\',
            \'post_status\' => \'publish\',
            \'posts_per_page\' => -1,
            \'date_query\' => array(
                array(
                    \'before\' => \'2 days ago\'
                )
            )
        ); 

        $query = new WP_Query( $args );
        $posts = $query->get_posts();

        foreach( $posts as $post ) { 
            wp_delete_post( $post->ID, true );
        }


    }     


}

new EventsWPCron();

2 个回复
SO网友:Milo

您没有指定要从查询中返回的帖子数量,因此它默认为在“设置”>“阅读”下设置的内容。

如果您希望所有这些都符合您的标准,请添加\'posts_per_page\' => -1 到您的查询参数。

SO网友:Krzysiek Dróżdż

PHP脚本几乎总是有一个时间限制。如果脚本的运行时间超过了限制,它就会被杀死。

因此,如果有许多帖子要删除,那么脚本就有可能被杀死,因此它只删除其中的一部分。

但这样做也不是很有效——如果会有很多很多帖子,那么它们就不适合内存限制了怎么办?

更好的方法是更频繁地运行cron事件,只删除部分旧帖子。这将是更好的服务器太。。。

因此,与其每天运行,不如每小时运行一次,并在查询中设置明确的限制。假设平均有1000篇帖子要删除。所以你的脚本应该每小时删除42个。让我们将其设置为100-这样您可以确保所有这些内容都将被删除。

如果应该更快地删除它们,那么将cron事件设置为更频繁地运行—每5分钟一次?

还有一件事值得注意。若旧帖子不应该显示在网站上,那个么我会以这样的方式修改查询,这些帖子将被忽略。在这种情况下,依赖cron不是一个好主意(删除帖子可能需要一段时间,cron可能不会被调用,等等……)。当然,在所有站点查询都忽略它们之后,您仍然可以删除它们。。。

结束

相关推荐

使用cron创建非阻塞任务

我正在写一个插件,它收集了一个相当大的提要。将从每个提要项创建一个自定义帖子。提要还可以包含从远程url上载的每个项目的图像。处理整个提要可能需要一些时间,因为我想在后台进行处理,所以我正在研究cron以实现这一点。目前我正在做这样的事情:class Cron_Task { const DEFAULT_TASK_INTERVAL = 30; public function __construct($taskName, $data) { add_filter