Как изменить тип сообщения по умолчанию в цикле?

Я хочу включить некоторые типы сообщений в запрос по умолчанию. Когда цикл начинается:

if ( have_posts() ) : // Start the Loop. while ( have_posts() ) : the_post(); 

пост типа типа по умолчанию – 'post' , поэтому другие типы сообщений не войдут в цикл (например, у меня есть настраиваемый тип сообщения, называемый 'news' ).

Я мог бы использовать объект запроса WP и делать:

  $type = 'news'; $args = array ('post_type' => $type); $temp = $wp_query; // assign ordinal query to temp variable for later use $wp_query = null; $wp_query = new WP_Query($args); while ( $wp_query->have_posts() ) : $wp_query->the_post(); 

И это сработает. Но есть ли способ разрешить другим типам сообщений в основном объекте запроса не беспокоиться об изменении цикла во всем мире?

Редактировать:

Я также пробовал с pre_get_posts без успеха:

 // Load Home Page Posts( reviews and news ) function search_home_posts( $query ) { if( $query->is_home() && $query->is_main_query() && !is_admin() ) { $query->set( 'post_type', array( 'reviews', 'news' ) ); } } add_action( 'pre_get_posts', 'search_home_posts' ); 

но ничего не делает. Я попробовал больше комбинаций, таких как $query->set( 'post_type', 'reviews' ); , но такое же поведение. Есть идеи?

Solutions Collecting From Web of "Как изменить тип сообщения по умолчанию в цикле?"

Вы должны использовать pre_get_posts hook, который позволяет точно настроить один (или несколько) запрос и изменить его, чтобы все работало правильно (что редко приводит к манипулированию основным запросом в шаблоне, особенно с разбиением на страницы).

Вы можете использовать это:

 $query = new WP_Query( 'post_type=any' ); 

Извлекает любой тип, кроме ревизий и типов, с параметром «exclude_from_search», установленным в TRUE

Источник