Cron在标准WordPress循环之外激发,因此$post
调用函数时,将不会填充任何与post相关的数据。显然,直接提供ID并不是引用不存在的ID$post
变量,这就是它在该场景中工作的原因。
将post\\u status设置为expired的最佳方法是使用WP\\u Query将您的函数更改为加载需要过期的帖子并在其中循环的函数:
function update_expired_field() {
$today = getdate();
$query = new WP_Query( \'meta_query\' => array(
\'key\' => \'your_expire_meta_key\',
\'value\' => $today[\'year\'] . \'-\' . $today[\'month\'] . \'-\' . $today[\'mday\'],
\'type\' => \'DATE\',
\'compare\' => \'<=\',
),
\'fields\' => \'ids\',
);
foreach( $query->posts as $postid ) {
wp_update_post( array(
\'ID\' => $postid,
\'post_status\' => \'expired\',
) );
}
}
在我显示的代码中,从数据库中查询meta\\u key字段,查找一个名为“your\\u expire\\u meta\\u key”的键,该键需要具有您希望帖子过期的日期的值,格式为YYYY-MM-DD。我们将该日期字段与今天的日期进行比较,以确定哪些帖子需要过期。这个
\'fields\' => \'ids\'
告诉WP\\u Query只返回post ID,以便我们尽可能快地运行。最后,我们循环遍历每个帖子ID,并将相关帖子更新为过期状态。