Использование стандартной функции поиска с пользовательским типом записей

12 дек. 2016 г., 13:34:37
Просмотры: 20.6K
Голосов: 4

Я использую следующий HTML-код формы для создания функции поиска на сайте WordPress:

<form method="get" action="<?php bloginfo('url'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="поиск&hellip;" maxlength="50" required="required" />
<button type="submit">Поиск</button>
</fieldset>
</form>

Это работает нормально, но я хочу получать результаты только для определенного пользовательского типа записей. Я использую шаблон search.php из темы twentysixteen, который содержит следующий код:

<?php  global $wp_query; ?>
<h1 class="search-title"><?php echo $wp_query->found_posts; ?> Найдено результатов для: <span><?php the_search_query(); ?></span></h1>

         <?php if ( have_posts() ) { ?>
           <ul class="results">
             <?php while ( have_posts() ) { the_post(); ?>
                <li>
                  <?php if ( has_post_thumbnail() ) { ?><div class="post-image"><a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail('thumbnail');?></a></div><?php }?>
                                    <div class="post-content">
                                    <h3><a href="<?php echo get_permalink(); ?>"><?php the_title();  ?></a></h3>
                  <p><?php echo substr(get_the_excerpt(), 0,140); ?>... <a href="<?php the_permalink(); ?>">Читать далее</a></p>
                                </div>
                </li>
             <?php } ?>
             </ul>
         <?php } ?>

Есть ли переменная, которую я могу добавить где-нибудь, чтобы получать результаты только для определенного типа записей? Спасибо

0
Все ответы на вопрос 2
2

Хорошо, я немного покопался и оказалось, что решение довольно простое. Нужно всего лишь добавить скрытое поле в форму поиска. Публикую здесь для тех, кто ищет ответ:

<form class="search" action="<?php echo home_url( '/' ); ?>">
        <input type="search" name="s" placeholder="Поиск&hellip;">
        <input type="submit" value="Поиск">
        <input type="hidden" name="post_type" value="custom-post-type">
</form>

Очевидно, вам нужно заменить значение "custom-post-type" на ваш собственный тип записи.

12 дек. 2016 г. 13:44:00
Комментарии

Братан, ты меня выручил!

MD. Atiqur Rahman MD. Atiqur Rahman
14 сент. 2017 г. 14:54:33

Это сработало и для меня. Если нужно включить несколько типов записей, можно использовать несколько input с именем "post_type[]". Например, для поиска в типах "product" и "post": <input type="hidden" name="post_type[]" value="product" /><input type="hidden" name="post_type[]" value="post" />

rAthus rAthus
30 сент. 2020 г. 16:38:11
0

Более элегантное решение — модифицировать основной запрос, используя действие pre_get_posts.

<?php 

function my_pre_get_posts($query) {

    if( is_admin() ) 
        return;

    if( is_search() && $query->is_main_query() ) {
        $query->set('post_type', 'custom-post-type-name');
    } 

}

add_action( 'pre_get_posts', 'my_pre_get_posts' );

Это решение не требует изменений в шаблоне.

12 дек. 2016 г. 16:53:09