投稿ステータスのあるすべての投稿を取得する方法は?


38

現在のユーザーによるすべての投稿を表示する必要があるフロントエンドダッシュボードを作成しています。だから、私は主に、すべての状態で記事を表示する必要がありpublishedtrashedそして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_postsget_postsquery_postsquery_posts
トムJノウェル

@TomJNowell:ウェイ・バックだった:)私は...今、最もofter WP_Queryを使用
Sisir

1
@Sisirには注意が必要WP_Queryです。フロントエンド、およびget_posts管理クエリに使用してwp_reset_postdataください。問題があります(この問題に関するメモチケットを参照してください)。
オーロヴラタ

回答:


65

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. 

私はそれが「any」を受け入れるかどうかわからないので、あなたが望むすべてのタイプで使用して配列します:

$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コールを...
トム・J Nowell

'post_status' => array( '!inherit' );(継承以外のpost_statusを示すために)このようなことはできません
-aequalsb

@aequalsbはどうですか'post_status' => array_diff(get_post_stati(), ['inherit']);
Cheslab

9

任意のステータスのすべての投稿を取得する簡単な方法があります:

$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以外に何かを配置すると、mainに表示される内容が上書きされます。本来のクエリ結果を完全に置き換えることが本当に目的である場合は、当然のことです。ただし、$ posts変数と$ post変数の名前を変更することをお勧めします。
ヘンリックアーランソン14

5
@Henrik私はあなたのコメントをまったく減らすつもりはありません(あなたの論理は健全で安全です)が、グローバルな$ post / $ posts変数にアクセスせずに関数内で$ post / $ postsを完全に許容できるものとして使用することを検討します開発中にロジックを維持するのに役立ちます。
-aequalsb

6

WP_Queryクラスメソッドは、->query()受け入れanyのための議論をpost_statuswp_get_associated_nav_menu_items()証拠を参照してください。

同じことがget_posts()言えます(これは上記の呼び出しの単なるラッパーです)。


3
WP_Queryドキュメントから:'any'-'exclude_from_search'がtrueに設定されている投稿タイプからのステータスを除くすべてのステータスを取得します。(そこにはタイプミスがあり、実際には投稿タイプではなく投稿ステータスを意味します。)これはステータスauto-draftを意味しtrash、除外されます。
タムリン

@Tamlyn Afaik、これはタイプミスではありません。これは、ポストタイプから任意のステータス取得し、公的に入手可能です。ステータスは単なる用語です。彼らは自分たちで公有財産や私有財産を手に入れませんでした。... を無効にすることで分類法を無効にすることができquery_varます。補足:投稿ステータスの複数形は...です
カイザー

1
コードをトレースすると(多くの場合、ドキュメントを読むより簡単です)、trueの値をフィルターするWP_Query#get_posts()呼び出しが呼び出され、クエリからこれらのステータスの投稿が除外されることがわかります。post_typeが「any」に設定されている場合、投稿タイプにも同様のプロセスがあります。get_post_stati()$wp_post_statusesexclude_from_search
タムリン

@Tamlyn $wp_post_statusesプロパティの内容を確認した後、私はあなたが正しいことを認めなければなりません:)
kaiser

ゴミ箱の状態では機能しません。
マックスウェル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. クライアントにはアクティブな管理セッションがありません。つまり、現在ログインしていません。

溶液

すべてのステータスを明示的に照会します。たとえば、そうではない(trashまたはauto-draftそれらが必要な可能性はかなり低い)statiを照会するには、次のようにします。

$q = new WP_Query([
    /* ... */
    'post_status' => get_post_stati(['exclude_from_search' => false]),
]);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.