Как изменить search.php, чтобы не показывать страницы, только показывать сообщения

Я хочу изменить search.php, чтобы он показывал только сообщения, а не страницы. Вы можете помочь?

Вот цикл в search.php:

<?php if (have_posts()) : ?> <?php while(have_posts()): the_post(); ?> 

Solutions Collecting From Web of "Как изменить search.php, чтобы не показывать страницы, только показывать сообщения"

Шаблон поиска слишком поздно, чтобы что-либо изменить: страницы ищутся уже здесь, а номера страниц будут неправильными. Не изменяйте результат, изменяйте запрос.

Фильтр posts_search вместо этого, и если есть поисковый posts_where_paged , отфильтруйте posts_where_paged и удалите тип сообщения, который вы не хотите искать.

Образец кода:

 is_admin() || add_filter( 'posts_search', function( $search ) { empty ( $search ) || add_filter( 'posts_where_paged', function( $where ) { return preg_replace( '~post_type IN \((.*)\'page\',?~', 'post_type IN (\1', $where ); }); return $search; }); , is_admin() || add_filter( 'posts_search', function( $search ) { empty ( $search ) || add_filter( 'posts_where_paged', function( $where ) { return preg_replace( '~post_type IN \((.*)\'page\',?~', 'post_type IN (\1', $where ); }); return $search; }); 

Я написал статью об этом некоторое время назад: Исключая определенные сообщения или страницы из результатов поиска в WordPress

Но длинный и короткий:

 function mySearchFilter($query) { if ($query->is_search) { $query->set('post_type', 'post'); }; return $query; }; add_filter('pre_get_posts','mySearchFilter'); 

Вы можете добавить это в файл functions.php вашей темы.

Что он делает, так это фильтр основного запроса базы данных, который выполняется WP, прежде чем он запускается, и сообщает WP, что он ищет только сообщения.

замените свою петлю на это и дайте мне знать, если эта работа.

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?> <?php if (is_page()) continue; ?> <?php endwhile; ?> <?php endif; ?>