投稿ステータスのあるすべての投稿を取得するにはどうすればよいですか?
-
-
[`post_status`パラメータ](http://codex.wordpress.org/Function_Reference/WP_Query#Type_.26_Status_Parameters)を使用してみましたか.`'post_status'=> 'any'`?Have you tried using the [`post_status` parameter](http://codex.wordpress.org/Function_Reference/WP_Query#Type_.26_Status_Parameters), ie. `'post_status' => 'any'`?
- 5
- 2011-03-30
- t31os
-
`query_posts`の代わりに` WP_Query``pre_get_posts`または `get_posts`を使用することを***強く***お勧めします.`query_posts`は絶対に使用しないでくださいI ***strongly*** recommend using `WP_Query` `pre_get_posts` or `get_posts` instead of `query_posts`. Never use `query_posts`
- 2
- 2013-04-16
- Tom J Nowell
-
@TomJNowell:それはずっと昔のことです:)私は今ほとんどWP_Queryを使用しています.@TomJNowell: that was way back :) I use WP_Query most ofter now..
- 0
- 2013-04-17
- Sisir
-
@Sisir注意してください.`wp_reset_postdata`に問題があるため、フロントエンドには `WP_Query`を使用し、管理者クエリには`get_posts`を使用してください([注](https://codex.wordpress.org/Class_Reference/WP_Queryを参照)#Interacting_with_WP_Query)および[ticket](https://core.trac.wordpress.org/ticket/18408)この問題について).@Sisir be careful, use `WP_Query` for front-end, and `get_posts` for admin queries as there is an issue with `wp_reset_postdata` (see the [note](https://codex.wordpress.org/Class_Reference/WP_Query#Interacting_with_WP_Query) and [ticket](https://core.trac.wordpress.org/ticket/18408) on this issue).
- 1
- 2017-01-30
- Aurovrata
-
5 回答
- 投票
-
- 2011-03-30
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」を受け入れるかどうかわからないため、必要なすべてのステータスの配列を使用してください.
$args = array( 'post_type' => 'my-post-type', 'post_author' => $current_user->ID, 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ); $query = new WP_Query($args); while ( $query->have_posts() ) : $query->the_post();
You can use the post_status parameter:
* '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.
I'm not sure that it accepts 'any' so use an array with all of the statuses you want:
$args = array( 'post_type' => 'my-post-type', 'post_author' => $current_user->ID, 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ); $query = new WP_Query($args); while ( $query->have_posts() ) : $query->the_post();
-
`get_post_stati()`を使用して、カスタムステータスを含むすべてのステータスを取得することもできます.You could also use `get_post_stati()` to get all statuses, including custom ones.
- 8
- 2013-01-31
- fuxia
-
`query_posts`呼び出しを殺すための無駄な機会...A wasted opportunity to kill off a `query_posts` call...
- 5
- 2013-04-16
- Tom J Nowell
-
残念ながら、このようなことはできません `'post_status'=> array( '!inherit');`(inherit以外のpost_statusを示すため)too bad we can't do something like this `'post_status' => array( '!inherit' );` (to indicate any post_status other than inherit)
- 0
- 2017-01-03
- aequalsb
-
@aequalsb `'post_status'=> array_diff(get_post_stati()、['inherit']);`はどうですか@aequalsb what about `'post_status' => array_diff(get_post_stati(), ['inherit']);`
- 0
- 2018-10-29
- Cheslab
-
オフトピック.「any」は実際には本物です.ドキュメント:https://developer.wordpress.org/reference/classes/wp_query/#post-type-parametersoff-topic. 'any' is a real thing actually. Docs: https://developer.wordpress.org/reference/classes/wp_query/#post-type-parameters
- 2
- 2020-01-20
- kirillrocks
-
- 2013-01-31
簡単な方法、任意のステータスのすべての投稿を取得する方法があります:
$articles = get_posts( array( 'numberposts' => -1, 'post_status' => 'any', 'post_type' => get_post_types('', 'names'), ) );
これで、すべての投稿を繰り返すことができます:
foreach ($articles as $article) { echo $article->ID . PHP_EOL; //... }
There is simple way, how to get all posts with any status:
$articles = get_posts( array( 'numberposts' => -1, 'post_status' => 'any', 'post_type' => get_post_types('', 'names'), ) );
Now you can iterate throughout all posts:
foreach ($articles as $article) { echo $article->ID . PHP_EOL; //... }
-
** $postsと$postはWordpress自身の変数名と競合します**.このコードを使用してプライマリ(メインコンテンツ)div以外に何かを配置している場合、これにより、メインに表示されていたものが上書きされます.元のクエリ結果を完全に置き換えることが本当に意図されている場合は、もちろんこれが必要です.ただし、$posts変数と$post変数の名前を変更することをお勧めします.**$posts and $post conflict with Wordpress' own variable names**. If you are using this code to put something in other than the primary (main content) div, this will overwrite what would have been shown in main. If your intention really is to completely replace the original query results, this is what you want, of course. But it's still a good idea to rename the $posts and $post variables.
- 2
- 2014-02-03
- Henrik Erlandsson
-
@Henrik私はあなたのコメントをまったく減らすつもりはありません(あなたのロジックは健全で安全です)が、グローバルな$post/$posts変数にアクセスせずに関数内で$post/$postsを完全に許容できるものとして使用することを検討しています-なぜなら開発中にロジックを維持するのに役立ちます.@Henrik i am not intending to diminish your comment at all (your logic is sound and safe), but i consider using $post/$posts as perfectly acceptable inside a function without access to the global $post/$posts variables -- because it helps me maintain logic during development.
- 5
- 2017-01-03
- aequalsb
-
- 2012-10-05
WP_Query
クラスメソッド->query()
は、any
のpost_status
引数を受け入れます.証明については、wp_get_associated_nav_menu_items()
を参照してください.同じことが
get_posts()
にも当てはまります(これは上記の呼び出しの単なるラッパーです).The
WP_Query
class method->query()
accepts anany
argument forpost_status
. Seewp_get_associated_nav_menu_items()
for a proof.The same goes for
get_posts()
(which is just a wrapper for above call).-
WP_Queryドキュメントから:_ 'any'-'exclude_from_search'がtrueに設定されている投稿タイプからのステータスを除くすべてのステータスを取得します._(タイプミスがあり、実際には投稿タイプではなく投稿ステータスを意味します.)これはステータス `auto-ドラフト `と`ゴミ箱 `は除外されます.From the WP_Query docs: _'any' - retrieves any status except those from post types with 'exclude_from_search' set to true._ (There's a typo there, they actually mean post statuses instead of post types.) This means statuses `auto-draft` and `trash` are excluded.
- 4
- 2013-04-15
- Tamlyn
-
@Tamlyn Afaik、これはタイプミスではありません.公開されている投稿タイプからステータスを取得します.ステータスは単なる用語です.彼ら自身は_public_または_private_プロパティを取得していません.何らかの理由で `query_var` ...を無効にすることで、分類法を無効にすることができます.補足:[投稿ステータスの複数形は...](http://unserkaiser.com/uncategorized/status-and-plural/).@Tamlyn Afaik, this is no typo. It _retrieves any status from post types_ that are publicly available. Status are just terms. They got no _public_ or _private_ property themselves. You _could_ disable a taxonomy with disabling the `query_var`... for whatever reason one would do that. Sidenote: [The plural of post status is...](http://unserkaiser.com/uncategorized/status-and-plural/).
- 0
- 2013-04-15
- kaiser
-
コードをトレースすると(多くの場合、ドキュメントを読むよりも簡単です)、 `WP_Query#get_posts()`が `get_post_stati()`を呼び出し、 `exclude_from_search`がtrueの値に対して` $ wp_post_statuses`をフィルタリングすることがわかります.これらの[ステータス](https://www.google.com/search?q=define+statuses)の投稿をクエリから除外します.post_typeが 'any'に設定されている場合、投稿タイプにも同様のプロセスがあります.If you trace through the code (often easier than reading the docs, I find) you can see that `WP_Query#get_posts()` calls `get_post_stati()` which filters `$wp_post_statuses` for values where `exclude_from_search` is true then it excludes posts with these [statuses](https://www.google.com/search?q=define+statuses) from the query. There's a similar process for post types when post_type is set to 'any'.
- 1
- 2013-04-16
- Tamlyn
-
@Tamlyn `$ wp_post_statuses`プロパティの内容を確認した後、私はあなたが正しいことを認めなければなりません:)@Tamlyn After checking the contents of the `$wp_post_statuses` property, I have to admit that you're right :)
- 0
- 2013-04-16
- kaiser
-
ゴミ箱のステータスでは機能しません.doesn't work for trash status.
- 0
- 2018-12-10
- Maxwell s.c
-
- 2019-08-28
ほとんどの場合、
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', ) );
In most cases you can use
get_posts()
with'any'
parameter for this:$posts = get_posts( array( 'numberposts' => -1, 'post_status' => 'any', 'post_type' => 'my-post-type', ) );
But this way you won't get posts with status
trash
andauto-draft
. You need to provide them explicitly, like this:$posts = get_posts( array( 'numberposts' => -1, 'post_status' => 'any, trash, auto-draft', 'post_type' => 'my-post-type', ) );
Or you can use get_post_stati() function to provide all existing statuses explicitly:
$posts = get_posts( array( 'numberposts' => -1, 'post_status' => get_post_stati(), 'post_type' => 'my-post-type', ) );
-
- 2019-03-28
any
をpost_status
として渡しても、次のすべての条件が当てはまる場合でも、結果に投稿が表示されません.- 1つの投稿が照会されています.この例としては、
name
、つまりスラッグによるクエリがあります. - 投稿のステータスが公開されていません.
- クライアントにアクティブな管理セッションがありません.つまり、現在ログインしていません.
解決策
すべてのステータスについて明示的にクエリします.たとえば、
trash
またはauto-draft
ではないstatiをクエリするには(これらが必要になる可能性はほとんどありません)、次のようにします.$q = new WP_Query([ /* ... */ 'post_status' => get_post_stati(['exclude_from_search' => false]), ]);
Even if you pass
any
aspost_status
, you still will not get the post in the result if all of the following conditions are true:- A single post is being queried. An example of this would be querying by
name
, i.e. the slug. - The post has a post status that is not public.
- The client does not have an active admin session, i.e. you are not currently logged in.
Solution
Query explicitly for every status. For example, to query for stati which are not
trash
orauto-draft
(it's pretty unlikely that you want those), you could do something like this:$q = new WP_Query([ /* ... */ 'post_status' => get_post_stati(['exclude_from_search' => false]), ]);
現在のユーザーによるすべての投稿を表示する必要があるフロントエンドダッシュボードを作成しています.そのため、主に
published
、trashed
、pending
のすべての状態の投稿を表示する必要があります.現在、単純なクエリを使用していますが、公開された投稿のみが返されます.誰か助けてもらえますか?他に何をする必要がありますか?