Я создаю панель управления переднего плана, где мне нужно показать все сообщения текущего пользователя. Итак, мне нужно показать сообщения во всех состояниях, в основном 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
@TomJNowell: это было давно 🙂 Сейчас я чаще всего использую WP_Query..
@Sisir, будьте осторожны, используйте
WP_Query
для внешнего интерфейса иget_posts
для административных запросов, так как есть проблемаwp_reset_postdata
(см. примечание и тикет по этому вопросу).Вы также можете использовать
get_post_stati()
для получения всех статусов, включая пользовательские.Упущенная возможность убить
query_posts
звонок…очень жаль, что мы не можем сделать что-то подобное
'post_status' => array( '!inherit' );
(чтобы указать любой post_status, кроме наследования)@aequalsb как насчет
'post_status' => array_diff(get_post_stati(), ['inherit']);
не по теме. «любой» на самом деле реальная вещь. Документы: developer.wordpress.org/reference/classes/wp_query/…
$posts и $post конфликтуют с собственными именами переменных WordPress. Если вы используете этот код, чтобы поместить что-то, кроме основного (основного содержимого) div, это перезапишет то, что было бы показано в основном. Если вы действительно намерены полностью заменить исходные результаты запроса, то, конечно же, это то, что вам нужно. Но все же рекомендуется переименовать переменные $posts и $post.
@ Хенрик, я вовсе не собираюсь уменьшать ваш комментарий (ваша логика здрава и безопасна), но я считаю использование $post/$posts вполне приемлемым внутри функции без доступа к глобальным переменным $post/$posts — потому что это помогает мне поддерживать логику во время разработки.
Вы можете использовать параметр post_status:
Я не уверен, что он принимает «любой», поэтому используйте массив со всеми нужными вам статусами:
Есть простой способ, как получить все посты с любым статусом:
Теперь вы можете перебирать все сообщения: