已解决##以下更新的代码
我已经创建了名为“esitykset”的自定义帖子类型,如果它们比帖子的“show\\u date”自定义字段中的日期旧,我想删除它们。
所以我尝试了以下代码
add_action( \'wp\', \'expire_events_daily\' );
function expire_events_daily() {
if ( ! wp_next_scheduled( \'delete_expired_events\' ) ) {
wp_schedule_event( time(), \'hourly\', \'delete_expired_events\');
}
}
add_action( \'delete_expired_events\', \'delete_expired_events_callback\' );
function delete_expired_events_callback()
{
$args = [
\'post_type\' => \'esitykset\',
\'posts_per_page\' => -1,
\'fields\' => \'ids\', //only get post id\'s
\'meta_query\' => [
[
\'key\' => \'show_date\',
\'value\' => current_time( \'Y/m/d\' ),
\'compare\' => \'<\'
]
]
];
$events = get_posts( $args );
if ( $events ) {
// Loop through the post ID\'s and delete the post
foreach ( $events as $id )
wp_trash_post( $id );
}
}
为了让上面的代码正常工作,我必须添加
define(\'ALTERNATE_WP_CRON\', true);
在我的wp配置中。php文件。
现在它成功了。谢谢你的帮助。
最合适的回答,由SO网友:Pieter Goosen 整理而成
此处的日期格式不匹配。你说你的日期保存为Y/m/d
在自定义字段中,这是正确的,但您尝试将此格式与unix timestamp (这是time()
)。
为了匹配或比较自定义字段中的两个不同日期,日期和时间格式必须完全相同,这就是自定义字段的工作方式。没有需要了解的逻辑,也没有转换和匹配不同日期/时间格式的逻辑,因此您需要手动确保所有内容都匹配。
而不是使用time()
要返回当前日期/时间并将其用作日期/时间比较,应使用current_time( \'Y/m/d\' )
. 请注意,这只有在WordPress 3.9中才能实现
另一个注意事项是,我们可以将您的函数简化如下,这将更快、性能更好(注意:至少需要PHP 5.4)
function delete_expired_events_callback()
{
$args = [
\'post_type\' => \'esitykset\',
\'posts_per_page\' => -1,
\'fields\' => \'ids\', //only get post id\'s
\'meta_query\' => [
[
\'key\' => \'show_date\',
\'value\' => current_time( \'Y/m/d\' ),
\'compare\' => \'<\'
]
]
];
$events = get_posts( $args );
if ( $events ) {
// Loop through the post ID\'s and delete the post
foreach ( $events as $id )
wp_delete_post( $id );
}
}