it-swarm-ko.tech

오늘보다 오래된 경우 게시 상태를 임시 보관으로 설정하는 방법

이전 질문에서 나는 스케줄링 대신 저장에 게시 된 미래의 날짜가 지정된 게시물 (사용자 정의 게시 유형)을 설정해야했습니다.

날짜가 '예정'인데 다시 초안으로 설정하고 싶습니다. 내가 init에 후크를 시도하고 그것을 게시 유형을 확인하는 경우 포장했습니다. 서버 시간보다 오래 되었다면 상태를 초안으로 설정한다고 생각했습니다.

대략적인 개요로서 :

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 *는 모든 열, ID, post_status 등을 반환합니다. 그래서이 경우 $my_post['ID'] = $a 설정은 아무 것도하지 않습니다.

대신 $my_post['id'] = $a->ID;을 사용해보십시오. 그것은 wp_update_post()을 호출하기 전에 ID를 정확하게 설정해야하며 사업에 있어야합니다.

그 외에도 사이트가로드 될 때마다 데이터베이스를 쿼리하면 결국 성능 문제가 발생할 수 있다는 것을 제외하고는 현재 수행중인 작업에 아무런 문제가 없습니다. 나는 대신 프로세스를 자동화하기 위해 시간당 chron 작업을 설정했다 ... 그러면 사용자 트래픽에 의존하거나 느려지지는 않는다.

1
EAMann