如何将职位状态设置为草稿,如果比今天大
-
16-10-2019 - |
题
在上一个问题中,我需要在保存上发布一个未来的日期帖子(自定义帖子类型),而不是安排它。
在“计划”之日起,我想再次将其设置为草稿。我一直在尝试将其挂钩并将其包裹在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();
否则,您的脚本将使用过多的内存,并且对大型数据库永远不会完成!
让我知道是否有任何问题