Страница с результатами пользовательского поиска
что я сделал,
я создал search.php
<?php get_header(); ?>
<div class="wapper">
<div class="contentarea clearfix">
<div class="content">
<h1 class="search-title"> <?php echo $wp_query->found_posts; ?>
<?php _e( 'Найдено результатов поиска', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1>
<ul>
<?php query_posts('showposts=3'); if (have_posts()) : ?>
<li>
<h3><a href="<?php echo get_permalink(); ?>">
<?php the_title(); ?>
</a></h3>
<?php the_post_thumbnail('medium') ?>
<?php echo substr(get_the_excerpt(), 0,200); ?>
<div class="h-readmore"> <a href="<?php the_permalink(); ?>">Читать далее</a></div>
</li>
<?php endif ?>
</ul>
</div>
</div>
</div>
<?php get_footer(); ?>
затем создал searchform.php
<form action="<?php bloginfo('siteurl'); ?>" id="searchform" method="get">
<input type="search" id="searchbox" name="s" placeholder="Введите ключевые слова" required>
<input type="image" id="searchsubmit" alt="Поиск" class="searchicon" src="<?php bloginfo( 'template_url' ); ?>/images/icon-search.gif" />
</form>
но на моей странице результатов не отображается описание содержимого и показывается только один результат. хотя в заголовке H1 показывается 2/3/5/6/7 и т.д. найденных результатов поиска. я хочу показывать как минимум 10 результатов на странице с пагинацией, а также показывать 200/300 символов текста содержимого для результатов поиска. ребята, можете помочь. я еще не эксперт в wp

У меня есть несколько рекомендаций по вашему вопросу:
Во-первых: перестаньте использовать query_posts()
. Ознакомьтесь с документацией об этой функции, чтобы понять, почему её не следует использовать в темах или плагинах. Тем не менее, если вы оказались в странной ситуации, когда у вас нет другого выхода и вам нужно использовать query_posts()
, после цикла вы должны запустить wp_reset_query()
. Вы должны понимать, что используете global $wp_query
, который содержит оригинальный запрос WordPress, а query_post
изменяет переменную global $wp_query
, что может привести к неожиданным результатам. Кроме того, вы используете устаревший параметр showposts
, который был заменён на posts_per_page
.
Во-вторых: вы можете использовать пользовательский шаблон поиска (search.php) для настройки внешнего вида. Просто создайте файл search.php в папке вашей темы и настройте его по своему усмотрению. Не делайте здесь пользовательские запросы; если вы это сделаете, вы создадите новый запрос для постов и потратите впустую запрос, уже выполненный WordPress. Это приведёт к потере ресурсов и негативно скажется на производительности.
В-третьих: чтобы изменить параметры запроса по умолчанию, используемые WordPress, такие как количество постов на странице и т.д., вы можете использовать действие pre_get_posts
.
Итак, создайте шаблон search.php по своему усмотрению и используйте действие pre_get_posts
, чтобы указать WordPress, какие параметры вы хотите использовать в поисковом запросе:
Шаблон search.php может выглядеть примерно так:
<?php
get_header();
global $wp_query;
?>
<div class="wapper">
<div class="contentarea clearfix">
<div class="content">
<h1 class="search-title"> <?php echo $wp_query->found_posts; ?>
<?php _e( 'Результаты поиска для', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1>
<?php if ( have_posts() ) { ?>
<ul>
<?php while ( have_posts() ) { the_post(); ?>
<li>
<h3><a href="<?php echo get_permalink(); ?>">
<?php the_title(); ?>
</a></h3>
<?php the_post_thumbnail('medium') ?>
<?php echo substr(get_the_excerpt(), 0,200); ?>
<div class="h-readmore"> <a href="<?php the_permalink(); ?>">Читать далее</a></div>
</li>
<?php } ?>
</ul>
<?php echo paginate_links(); ?>
<?php } ?>
</div>
</div>
</div>
<?php get_footer(); ?>
А действие pre_get_posts
может выглядеть так:
add_action( 'pre_get_posts', function( $query ) {
// Проверяем, что это нужный нам запрос: поисковый запрос на фронтенде
if( $query->is_main_query() && ! is_admin() && $query->is_search() ) {
// Изменяем параметры запроса
$query->set( 'posts_per_page', 3 );
}
} );

Не совсем необходимо использовать global $wp_query
в контексте шаблона, можно просто использовать объект $wp_query
там, где это нужно, но, наверное, лучше перестраховаться :-)

Я не был уверен в этом, поэтому включил глобальную ссылку. Спасибо за заметку.

@cybmeta спасибо, работает отлично. Еще раз спасибо. Если вы не против, не могли бы вы подсказать, как добавить пагинацию?

@PieterGoosen так ты думаешь, мне лучше заменить global $wp_query; на $wp_query;?

Я не включил пагинацию, потому что у тебя её не было в коде, я просто скопировал твой код без части с кастомным запросом. Ты можешь использовать любую из функций, предоставляемых WordPress для пагинации множества записей.

Вам необходимо запустить цикл, измените ваш файл search.php примерно следующим образом:
<?php get_header();?>
<div class="wapper">
<div class="contentarea clearfix">
<div class="content">
<ul>
<?php if ( have_posts() ) : ?>
<header class="page-header">
<p><?php printf( __( 'Результаты поиска для: %s', 'twentyfourteen' ), get_search_query() ); ?></p>
</header><!-- .page-header -->
<?php
// Начало цикла
while ( have_posts() ) : the_post();
?>
<li><h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3></li>
<?php the_post_thumbnail('medium') ?>
<?php echo substr(get_the_excerpt(), 0, 200); ?>
<div class="h-readmore">
<a href="<?php the_permalink(); ?>">Читать далее</a>
</div>
<?php
endwhile;
else :
// Если контент не найден, подключаем шаблон "Нет записей"
get_template_part( 'content', 'none' );
endif;
?>
</ul>
</div>
</div>
</div>
<?php get_footer(); ?>
