在前一个问题中,我需要将未来日期的帖子(自定义帖子类型)设置为在保存时发布,而不是安排它。
在“预定”的日期,我想再次将其设置为草稿。我一直在尝试钩住init并将其包装在if检查post类型中。我认为它将与服务器时间进行比较,如果它早于服务器时间,则将状态设置为draft。
大致概述如下:
if custom post type
get_the_time of post
get the server time
if post time is older than server time set status to draft
endif
在这里,使用我正在使用的一些代码进行更新。
function sfn_show_expire(){
global $wpdb;
$server_time = date(\'mdy\');
$result = $wpdb->get_results("SELECT * FROM wp_posts WHERE post_type = \'show\' AND post_status = \'publish\'");
if( !empty($result)) foreach ($result as $a){
$show_time = get_the_time(\'mdy\', $a->ID );
if ( $server_time > $show_time){
$my_post = array();
$my_post[\'ID\'] = $a->ID;
$my_post[\'post_status\'] = \'draft\';
wp_update_post( $my_post );
}
} // end foreach
}
add_action( \'init\', \'sfn_show_expire\' );
它得到了我需要的帖子,给了我服务器时间,但据我所知,它没有做任何事情。
最合适的回答,由SO网友:EAMann 整理而成
你的查询并没有给你一个帖子ID,而是给你一个完整的帖子。这个SELECT *
返回所有列,ID
, post_status
, 等So设置$my_post[\'ID\'] = $a
在这种情况下对你没有任何帮助。
尝试使用:$my_post[\'id\'] = $a->ID;
相反在你打电话之前应该准确设置你的身份wp_update_post()
你应该做生意。
除此之外,我认为你所做的没有问题。。。除了每次加载站点时查询数据库可能最终会产生性能问题之外。我会设置一个每小时计时的工作来自动化这个过程。。。那么它就不依赖于或减缓用户流量。