Вы наверняка когда-либо работали над сайтом на WordPress, в котором было большое количество пользовательских типов записей. Как известно, родной поиск WordPress — это не самый лучший поиск, поэтому многие блоггеры пользуются поиском от Google — Google custom search. Недавно мы работали над сайтом, в котором было приличное количество статей, видео, книг и записей в блоге. Использование стандартного поиска WordPress не помогало, а Google Search — запрещалось. Поэтому мы решили создать продвинутую форму поиска, которая позволяла бы пользователю выбирать те разделы сайта, в которых он хотел произвести поиск, отмечая такой раздел галочкой перед началом поиска. Пользователь может комбинировать свои поисковые запросы и, что самое важное, мы сделали так, что галочки сохраняются (не сбрасываются) на протяжении запроса. Это позволит пользователю видеть, что именно он искал и изменить эти параметры запроса при необходимости. В этой статье мы покажем вам как создать продвинутую форму поиска в WordPress, используя всю мощь поисковых запросов WordPress и ограничивать результаты пользовательскими типами записей.
Первым делом вам нужно открыть ваш файл searchform.php или любой другой, где расположена форма поиска в вашей теме. Затем добавляем туда следующие поля (в код формы):
<input type="hidden" name="post_type[]" value="articles" /> <input type="hidden" name="post_type[]" value="post" /> <input type="hidden" name="post_type[]" value="videos" /> <input type="hidden" name="post_type[]" value="books" />
Не забудьте изменить значения в value на свои пользовательские типы записей. Код выше просто ограничиваем ваши результаты поиска этими типами записей. Вы наверное заметили, что мы добавили все типы записей, кроме страниц. На это есть причины, которые мы обрисуем позже. Поэтому убедитесь, что вы включили ВСЕ типы записей, по которым необходимо проводить поиск с помощью соответствующей кнопки. Эти поля скрыты, поэтому пользователь их не увидит.
Теперь открываем свой файл search.php и вставляем следующий код выше цикла вывода основного контента, чтобы пользователи видели эти настройки вверху.
<form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>"> <input type="text" name="s" id="s" <?php if(is_search()) { ?>value="<?php the_search_query(); ?>" <?php } else { ?>value="Enter keywords …" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"<?php } ?> /><br /> <?php $query_types = get_query_var('post_type'); ?> <input type="checkbox" name="post_type[]" value="articles" <?php if (in_array('articles', $query_types)) { echo 'checked="checked"'; } ?> /><label>Articles</label> <input type="checkbox" name="post_type[]" value="post" <?php if (in_array('post', $query_types)) { echo 'checked="checked"'; } ?> /><label>Blog</label> <input type="checkbox" name="post_type[]" value="books" <?php if (in_array('books', $query_types)) { echo 'checked="checked"'; } ?> /><label>Books</label> <input type="checkbox" name="post_type[]" value="videos" <?php if (in_array('videos', $query_types)) { echo 'checked="checked"'; } ?> /><label>Videos</label> <input type="submit" id="searchsubmit" value="Поиск" /> </form>
Этот код добавит форму поиск над вашими результатами с поисковыми запросами внутри поля ввода. Также он проверяет, по каким типам записей производится поиск, и отмечает соответствующие галочки. Помните, как мы добавляли все типы записей в скрытое поле. Мы это делали затем, чтобы была возможность запустить проверку in_array и сохранить чекбоксы отмеченными. Никакой документации как реализовать подобное не обнаружилось, поэтому мы считаем этот способ оптимальным и работоспособным. Ниже — предпросмотр того, как выглядит форма поиска:
Теперь пользователь может с легкостью настраивать параметры поиска.
Надеемся, что статья поможет тем, кому это нужно.