让我从第二个开始回答你的问题。。。所以
为什么要一次删除所有帖子
您正确安排了活动,因此它将每天运行一次。在运行的函数中,选择一些帖子并将其删除,如果它们已过期:
$args = array(
\'post_type\' => \'post\',
\'category_name\' => \'stories\',
\'posts_per_page\' => -1
);
$stories = new WP_Query($args);
上面的代码将从“故事”类别中选择所有帖子(因为posts\\u per\\u page=-1)。
在这里,您可以循环浏览所有这些帖子,检查给定帖子是否已过期,如果已过期,请将其删除:
while($stories->have_posts()): $stories->the_post();
$expiration_date = get_post_meta( get_the_ID(), \'expiry_story_date\', true );
$expiration_date_time = strtotime($expiration_date);
if ($expiration_date_time < time()) {
wp_delete_post(get_the_ID(),true);
}
endwhile;
这就是它一次删除所有帖子的原因。
那么如何让它只删除一篇帖子呢
修改代码的最简单方法是添加一行,在删除第一篇帖子后停止循环:
if ($expiration_date_time < time()) {
wp_delete_post(get_the_ID(),true);
return;
}
但这当然不是最好的方式。
更好的方法是只获取应该删除的帖子,只获取其中一个:
$args = array(
\'post_type\' => \'post\',
\'category_name\' => \'stories\',
\'posts_per_page\' => 1,
\'meta_query\' => array(
array( \'key\' => \'expiry_story_date\', \'compare\' => \'<=\', \'value\' => date(\'Y-m-d\') ) // here’s the very important part - you have to change the date format so it’s the same as the format you store in your custom fields
)
);
$expired_stories = new WP_Query($args);