Как получить мой пользовательский тип сообщения для отображения в последних сообщениях с помощью «pre_get_posts»

  1. Я создал пользовательский тип сообщения (назовите его «my-post-type»).
  2. Я создал страницу archive-my-post-type.php для отображения всех пользовательских типов сообщений.
  3. Глядя на раздел «Последние сообщения» боковой панели, я заметил, что ни один пользовательский тип сообщений не появляется .
  4. Я бы хотел, чтобы типы пользовательских сообщений отображались в последних сообщениях .
  5. Я прочитал эту статью здесь, в WP Stack, в которой говорится, что я могу использовать pre_get_posts для добавления моего пользовательского типа сообщений в последние сообщения (боковая панель).
  6. Пробовал. Это не сработало.

Так…

Я провел некоторое расследование на pre_get_posts и из того, что я могу сказать …

  • pre_get_posts используется для изменения основного цикла .

Также codex дает следующее предупреждение:

Определение целевых запросов

При использовании pre_get_posts помните о том, что вы меняете запрос. Одним из полезных инструментов является is_main_query (), который может помочь вам гарантировать, что запрос, который вы изменяете, является только основным запросом .

  • Эта фраза «целевые запросы» в заголовке кажется (мне) подразумевающей, что я могу «настроить», какой запрос я хочу изменить.
  • Также код из стека также не использует is_main_query() .
  • Итак, теперь мне интересно … «Недавние сообщения» НЕ являются частью «основного запроса»?

Поэтому я добавил код, чтобы точно посмотреть, какие запросы были запущены на странице, и увидел два запроса

Этот запрос был выше всей страницы (за ней следуют все мои пользовательские сообщения) …

 'SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'press-release' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 10' 

Другой запрос был выше боковой панели

 'SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 5' 

Я хотел бы добавить свой пользовательский тип сообщения в этот запрос.

CAN (и СЛЕДУЕТ) Я выполняю это, используя pre_get_posts?

Я довольно зеленый, поэтому я действительно надеюсь, что этот вопрос имеет смысл.

Solutions Collecting From Web of "Как получить мой пользовательский тип сообщения для отображения в последних сообщениях с помощью «pre_get_posts»"

Ну, вы НЕ ДОЛЖНЫ использовать pre_get_posts , так как он будет изменять ВСЕ запросы на сайте.

Кроме того, запрос последнего плагина сообщений не является основным запросом. Основной запрос выполняется для отображения текущей страницы после анализа переменных запроса из URL-адреса и, кроме всего прочего, отвечает за текущий шаблон страницы.

То, что вам ДОЛЖНО делать, это фильтр- widget_posts_args :

 add_filter( 'widget_posts_args', 'wp130512_recent_posts_args'); /** * Add CPTs to recent posts widget * * @param array $args default widget args. * @return array $args filtered args. */ function wp130512_recent_posts_args($args) { $args['post_type'] = array('post', 'my_CPT'); return $args; } 

ИЛИ

WP_Widget_Recent_Posts класс виджетов ( WP_Widget_Recent_Posts ) для большего контроля.

Пример кода: http://rollinglab.com/2012/06/extend-wordpress-recent-posts-widget/