简而言之,您可以通过告诉Wordpress将将来的帖子标记为\'published\'
而不是\'scheduled\'
. 您可以使用future_post
钩子,当post更改状态时调用它。每个帖子类型都会自动获得自己的未来挂钩;因为我使用的自定义帖子类型是event
, 我可以使用future_event
钩代码如下:
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action(\'future_event\',\'_future_post_hook\');
add_action(\'future_event\',\'publish_future_post_now\');
}
function publish_future_post_now($id) {
// Set new post\'s post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action(\'init\', \'setup_future_hook\');
此解决方案来自此SE问题:
Marking future dated post as published这种方法的一个警告是,我要补充的警告是,这使得在未来的帖子中进行循环变得更加困难。之前,我可以简单地使用\'post_status\'
=> \'future\'
; 但现在,既然我们已经设定了未来的职位post_status
到published
, 这行不通。
为了避免这个问题,你可以使用posts_where
在循环中过滤(例如,请参见此处的codex上的日期范围示例:http://codex.wordpress.org/Class_Reference/WP_Query#Time_Parameters), 或者,您可以将当前日期与发布日期进行比较,如下所示:
// get the event time
$event_time = get_the_time(\'U\', $post->ID);
// get the current time
$server_time = date(\'U\');
// if the event time is older than (less than)
// the current time, do something
if ( $server_time > $event_time ){
// do something
}
然而,这两种技术都没有单独的
post_status
对于未来的职位。也许是一种习惯
post_status
这是一个很好的解决方案。