我正在使用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();
SO网友:Krzysiek Dróżdż
PHP脚本几乎总是有一个时间限制。如果脚本的运行时间超过了限制,它就会被杀死。
因此,如果有许多帖子要删除,那么脚本就有可能被杀死,因此它只删除其中的一部分。
但这样做也不是很有效——如果会有很多很多帖子,那么它们就不适合内存限制了怎么办?
更好的方法是更频繁地运行cron事件,只删除部分旧帖子。这将是更好的服务器太。。。
因此,与其每天运行,不如每小时运行一次,并在查询中设置明确的限制。假设平均有1000篇帖子要删除。所以你的脚本应该每小时删除42个。让我们将其设置为100-这样您可以确保所有这些内容都将被删除。
如果应该更快地删除它们,那么将cron事件设置为更频繁地运行—每5分钟一次?
还有一件事值得注意。若旧帖子不应该显示在网站上,那个么我会以这样的方式修改查询,这些帖子将被忽略。在这种情况下,依赖cron不是一个好主意(删除帖子可能需要一段时间,cron可能不会被调用,等等……)。当然,在所有站点查询都忽略它们之后,您仍然可以删除它们。。。