Как получить все сообщения с любым статусом?
-
-
Вы пробовали использовать параметр [`post_status`] (http://codex.wordpress.org/Function_Reference/WP_Query#Type_.26_Status_Parameters),т.е.'post_status'=> 'любой' '?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
-
Я *** настоятельно *** рекомендую использовать WP_Query,pre_get_posts илиget_posts вместо query_posts.Никогда не используйте query_postsI ***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_Query` для внешнего интерфейса и`get_posts` для запросов администратора,поскольку есть проблема с `wp_reset_postdata` (см. [Примечание] (https://codex.wordpress.org/Class_Reference/WP_Query#Interacting_with_WP_Query) и [тикет] (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.
Я не уверен,что он принимает «любой»,поэтому используйте массив со всеми желаемыми статусами:
$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'); `(чтобы указать любой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
-
не по теме.«любой» на самом деле реальная вещь.Документы: 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,это перезапишет то,что было бы показано вmain.Если вы действительно намерены полностью заменить исходные результаты запроса,это,конечно,то,что вам нужно.Но все же рекомендуется переименовать переменные $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-draft` и `trash` исключены.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,это не опечатка.Он _ извлекает любой статус из общедоступных типов сообщений_.Статус - это просто условия.У них самих не было ни публичной,ни частной собственности.Вы _ можете_ отключить таксономию,отключив `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 ()`,который фильтрует `$ wp_post_statuses` для значений,где`exclude_from_search` истинно,тогда этоисключает сообщения с этими [статусами] (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
,вы по-прежнему не получит сообщение в результате ,если выполнены все следующие условия:- Запрашивается одно сообщение.Примером этого может быть запрос по
name
,то есть слагу. - Сообщение имеет статус "закрытый".
- У клиента нет активного сеанса администратора,т.е. вы в настоящее время не вошли в систему.
Решение
Запрашивать явно для каждого статуса.Например,чтобы запросить данные,которые не являются
trash
илиauto-draft
(маловероятно,что они вам нужны),вы можете сделать что-то вроде этого:$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
.Сейчас я использую простой запрос,но он возвращает только опубликованные сообщения.Кто-нибудь может помочь?Что еще мне нужно сделать?