如果发布日期早于今天,如何将发布状态设置为草稿

时间:2010-09-07 作者:curtismchale

在前一个问题中,我需要将未来日期的帖子(自定义帖子类型)设置为在保存时发布,而不是安排它。

在“预定”的日期,我想再次将其设置为草稿。我一直在尝试钩住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\' );
它得到了我需要的帖子,给了我服务器时间,但据我所知,它没有做任何事情。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

你的查询并没有给你一个帖子ID,而是给你一个完整的帖子。这个SELECT * 返回所有列,ID, post_status, 等So设置$my_post[\'ID\'] = $a 在这种情况下对你没有任何帮助。

尝试使用:$my_post[\'id\'] = $a->ID; 相反在你打电话之前应该准确设置你的身份wp_update_post() 你应该做生意。

除此之外,我认为你所做的没有问题。。。除了每次加载站点时查询数据库可能最终会产生性能问题之外。我会设置一个每小时计时的工作来自动化这个过程。。。那么它就不依赖于或减缓用户流量。

SO网友:ericn

我想发表评论,但看起来你的帖子已经关闭了。

无论如何,我的朋友,要非常小心,不要将数组的声明放在循环之外:

$my_post = array();
否则,对于大型数据库,您的脚本将使用过多内存,并且永远不会完成!

如果有任何问题,请告诉我

结束

相关推荐