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

在“计划”之日起,我想再次将其设置为草稿。我一直在尝试将其挂钩并将其包裹在IF检查后类型中。我认为它将与服务器时间进行比较,然后将状态设置为草稿,如果它比服务器时间还老。

作为粗略的轮廓:

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' );

它得到了我需要的帖子,并给了我服务器的时间,但据我所知,没有做任何过去的事情。

有帮助吗?

解决方案

您的查询没有给您发布ID,它为您提供了整个帖子。这 SELECT * 返回所有列, ID, post_status, 等等。所以设置 $my_post['ID'] = $a 在这种情况下,您不会为您做任何事情。

尝试使用: $my_post['id'] = $a->ID; 反而。在打电话之前,应该准确设置您的ID wp_update_post() 而且您应该开展业务。

除此之外,我看到您的工作没有问题...除了每次加载网站时查询数据库的问题最终可能会造成性能问题。我将设置一个小时的Chron作业以自动化该过程...然后它不取决于或减慢用户流量。

其他提示

我想发表评论,但看起来您的帖子已关闭以发表评论。

无论如何,我的朋友,请非常小心,将阵列的声明在循环外面:

$my_post = array();

否则,您的脚本将使用过多的内存,并且对大型数据库永远不会完成!

让我知道是否有任何问题

许可以下: CC-BY-SA归因
scroll top