Я создаю интерфейсную панель, где мне нужно показать все сообщения текущего пользователя. Итак, мне нужно показывать посты во всех штатах, в основном published
, trashed
и pending
. Сейчас я использую простой запрос, но он возвращает только опубликованные сообщения.
$query = array(
'post_type' => 'my-post-type',
'post_author' => $current_user->ID
);
query_posts($query);
Кто-нибудь может помочь? Что еще мне нужно сделать?
post_status
параметр , т.е.'post_status' => 'any'
?WP_Query
pre_get_posts
илиget_posts
вместоquery_posts
. Никогда не используйтеquery_posts
WP_Query
для внешнего интерфейса, так иget_posts
для запросов администратора, так как есть проблема сwp_reset_postdata
(см. Примечание и тикет по этому вопросу).Ответы:
Вы можете использовать параметр post_status:
Я не уверен, что он принимает 'any', поэтому используйте и массив со всеми типами, которые вы хотите:
источник
get_post_stati()
для получения всех статусов, в том числе пользовательских.query_posts
вызов ...'post_status' => array( '!inherit' );
Жаль, что мы не можем сделать что-то подобное (чтобы указать любой post_status, кроме наследовать)'post_status' => array_diff(get_post_stati(), ['inherit']);
Есть простой способ, как получить все сообщения с любым статусом:
Теперь вы можете перебирать все сообщения:
источник
Метод
WP_Query
класса->query()
принимаетany
аргумент дляpost_status
. Смотритеwp_get_associated_nav_menu_items()
для доказательства.То же самое касается
get_posts()
(который является просто оберткой для вышеупомянутого вызова).источник
auto-draft
иtrash
исключаются.query_var
... по любой причине, по которой можно это сделать. Sidenote: Множественный пост статуса является ... .WP_Query#get_posts()
вызовы,get_post_stati()
которые фильтруют$wp_post_statuses
значения, гдеexclude_from_search
true, тогда исключают сообщения с этими статусами из запроса. Аналогичный процесс для типов записей, когда для post_type установлено значение «any».$wp_post_statuses
объекта, я должен признать, что вы правы :)В большинстве случаев вы можете использовать
get_posts()
с'any'
параметром для этого:Но таким образом вы не будете получать сообщения со статусом
trash
иauto-draft
. Вы должны предоставить их явно, как это:Или вы можете использовать функцию get_post_stati () для явного предоставления всех существующих статусов:
источник
Даже если вы пройдете
any
какpost_status
, вы все равно не получите сообщение в результате, если выполняются все следующие условия:name
, то есть слизняк.Решение
Запрос явно для каждого статуса. Например, чтобы запросить stati, которые не являются
trash
илиauto-draft
(маловероятно, что вы хотите их), вы можете сделать что-то вроде этого:источник