Поиск по категориям - это обычная для большинства сайтов функция, которая позволяет искать в определенной категории, а не по всему сайту, чтобы получить более точные результаты. Это очень полезно, если ваш сайт хорошо структурирован по категориям (например, сайты электронной коммерции, где в каждой категории представлен один тип товаров). К сожалению, эта функциональность не реализована в WordPress. В этой статье мы рассмотрим, как расширить стандартную поисковую функциональность WordPress, чтобы обеспечить поиск по категориям.
Добавьте список категорий в форму поиска
Для поиска по категориям нам нужно сначала реализовать поисковую строку. В строку поиска нужно добавить еще одно поле - категория, которое отображается как поле выбора.
Как создать функциональность поиска по категориям в WordPress
Это делается простым добавлением функции wp_dropdown_categories() в форму поиска. Все, что вам нужно сделать, это поместить следующий код в файл searchform.php вашей темы (это файл, где код формы поиска хранится по умолчанию, но это не всегда необходимо):
1 2 3 4 5 | <form id="searchform" method="get" action="<?php echo home_url(); ?>"> <input type="text" name="s" id="s" size="15" /> <?php wp_dropdown_categories( 'show_option_none=Select' ); ?> <input type="submit" value="Search" /> </form> |
Где Select - можно заменить на свой произвольный текст.
Если в вашей теме нет файла searchform.php, попробуйте найти код формы поиска в файле header.php (или sidebar.php, это зависит от расположения формы поиска в вашем блоге), а затем замените его на приведенный выше код.
Если вы хотите узнать больше о функции wp_dropdown_categories(), вам следует прочитать Кодекс.
Добавьте категорию в параметры поиска
Попробуйте выполнить поиск с помощью нового окна поиска. Вы увидите, что ничего не изменилось, кроме url. Старый url содержит только параметр поиска (это "s"), а новый содержит еще один параметр - категорию (это "cat"). Новый url выглядит следующим образом:
1 | http://localhost/wp/?s=image&cat=120 |
Теперь нам нужно сказать WordPress, чтобы он понял параметр category и получил соответствующие посты. Добавьте следующий код в файл functions.php:
1 2 3 4 5 6 7 8 9 10 | add_action( 'pre_get_posts', 'search_by_cat' ); function search_by_cat() { if ( is_search() ) { $cat = empty( $_GET['cat'] ) ? '' : (int) $_GET['cat']; add_query_arg( 'cat', $cat ); } } |
Здесь мы подключаемся к действию pre_get_posts. Это действие запускается, когда WordPress подготавливает запрос перед получением постов из базы данных. Наша подключенная функция выполняет следующие действия:
- проверить, является ли текущий запрос поисковым
- получить параметр категории. Обратите внимание, что если пользователь не выбрал ни одной категории (что означает поиск во всех категориях), то параметр category будет установлен в -1. Поэтому нам нужно проверить это, чтобы убедиться, что параметр category является положительным целым числом или пустой строкой, если категория не выбрана
- добавить параметр category в массив параметров текущего запроса
Теперь вы можете обновить свой блог и попробовать поискать. Не забудьте выбрать категорию, чтобы сузить результаты поиска. Вы увидите, что функция поиска по категориям работает хорошо, как и ожидалось.
Заключение
Функция поиска по категориям очень полезна для некоторых типов WordPress-блогов, таких как сайты для скачивания или сайты электронной коммерции, где все содержимое хорошо распределено по категориям. Эта функция полезна для пользователей, поскольку они быстрее и точнее находят то, что им нужно. Внедрение поиска по категориям - это хороший способ улучшить пользовательский опыт на вашем сайте.