it-swarm.cn

如果比今天更早,如何将发布状态设置为草稿

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

在“预定”的日期,我想再次将其设置为草稿。我一直在尝试挂钩到init并将其包装在if检查post类型中。我认为它将与服务器时间进行比较,然后将状态设置为草稿,如果它早于服务器时间。

粗略概述:

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
curtismchale

您的查询没有给您一个帖子ID,它会给您一个完整的帖子。 SELECT *返回所有列,IDpost_status等。因此,在这种情况下,设置$my_post['ID'] = $a对您没有任何作用。

尝试使用:$my_post['id'] = $a->ID;代替。这应该在你打电话给wp_update_post()之前准确设置你的身份证,你应该开展业务。

除此之外,我发现你正在做的事情没有问题......除了每次加载网站时查询数据库最终可能会产生性能问题。我设置了一个每小时的chron作业,而不是自动化过程...然后它不依赖或减慢用户流量。

1
EAMann