게시물 상태가 모든 게시물을 얻는 방법?


38

현재 사용자의 모든 게시물을 표시해야하는 프런트 엔드 대시 보드를 만들고 있습니다. 그래서 저는 주로 모든 국가에 게시물을 표시해야 published, trashed하고 pending. 현재 간단한 쿼리를 사용하고 있지만 게시 된 게시물 만 반환합니다.

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID              
    );
    query_posts($query);

누구든지 도울 수 있습니까? 다른 무엇을해야합니까?


4
당신이 사용하는 노력이 post_status매개 변수를 예. 'post_status' => 'any'?
t31os

2
나는 강력하게 사용하는 것이 좋습니다 WP_Query pre_get_posts또는 get_posts대신 query_posts. 사용하지 마십시오query_posts
Tom J Nowell

@TomJNowell : 그것은 돌아왔다 :) 나는 지금 가장 WP_Query를 사용합니다 ..
Sisir

1
@Sisir는 문제가 있으므로주의 WP_Query하여 프론트 엔드 및 get_posts관리자 쿼리에 사용 wp_reset_postdata하십시오 ( 이 문제에 대한 참고티켓 참조 ).
Aurovrata

답변:


64

post_status 매개 변수를 사용할 수 있습니다.

* 'publish' - a published post or page
* 'pending' - post is pending review
* 'draft' - a post in draft status
* 'auto-draft' - a newly created post, with no content
* 'future' - a post to publish in the future
* 'private' - not visible to users who are not logged in
* 'inherit' - a revision. see get_children.
* 'trash' - post is in trashbin. added with Version 2.9. 

나는 그것이 '모든'을 받아 들일 지 확신하지 못하므로 원하는 모든 유형을 사용하고 배열하십시오 :

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID,
    'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')    
);
$loop = new WP_Query($query);

while ( $loop->have_posts() ) : $loop->the_post();

7
get_post_stati()사용자 정의 상태를 포함한 모든 상태를 얻는 데 사용할 수도 있습니다.
fuxia

5
query_posts전화를 끊을 기회 낭비 ...
Tom J Nowell

너무 나쁜 우리는 이런 일을 할 수 없다 'post_status' => array( '!inherit' );(상속 이외의 post_status을 표시하기)
aequalsb

@aequalsb 어떻습니까'post_status' => array_diff(get_post_stati(), ['inherit']);
Cheslab

8

상태를 가진 모든 게시물을 얻는 방법은 간단합니다.

$articles = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => get_post_types('', 'names'),
 )
);

이제 모든 게시물에서 반복 할 수 있습니다.

foreach ($articles as $article) { 
 echo $article->ID . PHP_EOL; //...
}

2
$ posts와 $ post는 Wordpress의 고유 변수 이름과 충돌합니다 . 이 코드를 사용하여 기본 (메인 컨텐츠) div 이외의 다른 것을 넣으면 메인에 표시된 내용을 덮어 씁니다. 원래 쿼리 결과를 완전히 바꾸려는 의도라면 이것이 원하는 것입니다. 그러나 $ posts 및 $ post 변수의 이름을 바꾸는 것이 여전히 좋습니다.
Henrik Erlandsson

5
@ 헨릭 나는 당신의 의견을 전혀 줄이려고하지는 않지만 (논리가 안전하고 안전합니다), 전역 $ post / $ posts 변수에 액세스하지 않고 함수 내에서 $ post / $ posts를 완벽하게 허용되는 것으로 간주합니다. 개발하는 동안 논리를 유지하는 데 도움이됩니다.
aequalsb

6

WP_Query클래스 메소드는 ->query()수용 any에 대한 인수를 post_status. wp_get_associated_nav_menu_items()증거를 참조하십시오 .

동일은 간다 get_posts()(위의 호출을위한 단지 래퍼입니다).


3
WP_Query 문서에서 : ' any'- 'exclude_from_search'가 true로 설정된 게시물 유형의 상태를 제외한 모든 상태를 검색합니다. 오타가 있으며 실제로 게시물 유형 대신 게시물 상태를 의미합니다. 이는 상태를 의미 auto-draft하며 trash제외됩니다.
Tamlyn

@Tamlyn Afaik, 이것은 오타가 아닙니다. 이 포스트 유형의 어떤 상태를 검색 공개적으로 사용할 수 있습니다. 상태는 용어 일뿐입니다. 그들은 공공 재산 이나 사유 재산을 얻지 못했습니다 . 당신은 할 수 해제와 분류 체계를 사용하지 않도록 query_var할 것이라고 어떤 이유 하나 .... 참고 사항 : 복수 게시 상태는 ... 입니다.
kaiser

1
코드를 통해 추적하면 (종종 문서를 읽는 것보다 쉽습니다.) 어디에서 값 을 필터링 하는 WP_Query#get_posts()호출 get_post_stati()이 참인지 는 알 수 있습니다. 그러면 이러한 상태의 게시물을 쿼리에서 제외시킵니다 . post_type이 'any'로 설정된 경우 게시물 유형에 대해 비슷한 프로세스가 있습니다. $wp_post_statusesexclude_from_search
Tamlyn

@Tamlyn $wp_post_statuses속성 의 내용을 확인한 후 , 당신이 옳다는 것을 인정해야합니다 :)
kaiser

휴지통 상태에서는 작동하지 않습니다.
Maxwell sc

2

대부분의 경우이 매개 변수 get_posts()와 함께 사용할 수 있습니다 'any'.

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => 'my-post-type',
 )
);

그러나 이렇게하면 상태가 trash이고 게시물이 표시되지 않습니다 auto-draft. 다음과 같이 명시 적으로 제공해야합니다.

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any, trash, auto-draft',
  'post_type' => 'my-post-type',
 )
);

또는 get_post_stati () 함수를 사용하여 기존의 모든 상태를 명시 적으로 제공 할 수 있습니다.

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => get_post_stati(),
  'post_type' => 'my-post-type',
 )
);

1

당신이 통과하더라도 any같은 post_status, 당신은 여전히 결과에 게시물을받지 않습니다 다음 조건 모두에 해당하는 경우 :

  1. 단일 게시물을 쿼리 중입니다. 이에 대한 예 name는 슬러그에 의한 쿼리 입니다.
  2. 게시물이 공개 상태가 아닌 게시물 상태입니다.
  3. 클라이언트에 활성 관리 세션이 없습니다 (예 : 현재 로그인하지 않은 상태).

해결책

모든 상태에 대해 명시 적으로 쿼리하십시오 . 예를 들어, stati를 쿼리하지 trash않거나 auto-draft(원하는 것 같지 않은 경우) 다음과 같이 할 수 있습니다.

$q = new WP_Query([
    /* ... */
    'post_status' => get_post_stati(['exclude_from_search' => false]),
]);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.