Вопрос или проблема
Как мне вернуть все посты, соответствующие определенной таксономии, используя <?php get_search_form(); ?>
Например: если пользователь вводит запрос, который соответствует имени тега или категории, search.php
вернет все посты с соответствующим тегом или которые попадают в соответствующую категорию. Я работаю с кастомным типом постов, и на данный момент get_search_form();
похоже, возвращает совпадения только на основе содержания и заголовка. Пожалуйста, помогите! Спасибо.
используйте эту функцию, вставив ее в файл function.php для фильтра cat=22, измените id категории на свой выбор
function my_search_form( $form ) {
$form = '<form role="search" method="get" id="searchform" action="' . home_url( "https://wordpress.stackexchange.com/" ) . '" >
<div><label class="screen-reader-text" for="s">' . __('Поиск по:') . '</label>
<input type="text" value="' . get_search_query() . '" name="s" id="s" />
<input type="text" value="22" name="cat" id="scat" />
<input type="submit" id="searchsubmit" value="'. esc_attr__('Поиск') .'" />
</div>
</form>';
return $form;
}
add_filter( 'get_search_form', 'my_search_form' );
.
Ответ или решение
Чтобы решить задачу поиска по тегам и категориям в WordPress с использованием пользовательского типа записей, необходимо настроить соответствующий функционал. По умолчанию функция get_search_form()
возвращает результаты на основе содержания и заголовков записей. Однако, для осуществления дополнительного поиска по таксономиям — таким как метки и категории — вам потребуется внести изменения в код.
Шаг 1: Создание кастомной формы поиска
Предлагаю адаптировать форму поиска так, чтобы она также учитывала выбранные категории и тэги. Ниже представлен код, который следует добавить в файл functions.php
вашей темы:
function my_search_form( $form ) {
$form = '<form role="search" method="get" id="searchform" action="' . home_url( '/' ) . '">
<div>
<label class="screen-reader-text" for="s">' . __('Поиск:') . '</label>
<input type="text" value="' . get_search_query() . '" name="s" id="s" />
<input type="text" value="" name="cat" id="scat" placeholder="ID категории" />
<input type="text" value="" name="tag" id="stag" placeholder="Тэг" />
<input type="submit" id="searchsubmit" value="'. esc_attr__('Поиск') .'" />
</div>
</form>';
return $form;
}
add_filter( 'get_search_form', 'my_search_form' );
Шаг 2: Модификация запросов поиска
После того, как вы создали кастомную форму поиска, необходимо обработать введенные пользователем данные для корректного построения запроса. Для этого добавьте следующий код в свой файл, чтобы изменить стандартный поисковый запрос:
function custom_search_query( $query ) {
if ( $query->is_search && ! is_admin() ) {
// Извлекаем значение категории и тега
$cat = sanitize_text_field( $_GET['cat'] );
$tag = sanitize_text_field( $_GET['tag'] );
if ( ! empty( $cat ) ) {
$query->set( 'cat', $cat );
}
if ( ! empty( $tag ) ) {
$query->set( 'tag', $tag );
}
}
}
add_action( 'pre_get_posts', 'custom_search_query' );
Шаг 3: Тестирование и отладка
После внесения изменений, обязательно протестируйте функционал вашей формы поиска. Введите различные теги и ID категорий, чтобы убедиться, что выводятся правильные результаты.
Рекомендации по SEO
- Ключевые слова: Включите ключевые слова, соответствующие вашему контенту, как в заголовках, так и в описаниях.
- Мета-теги: Убедитесь, что у каждой страницы поиска установлены правильные мета-теги, а также учитывайте использование
meta description
для повышения привлекательности в результатах поиска. - Оптимизация URL: Проверьте, что структура URL читабельна и содержит ключевые слова.
Заключение
Создание кастомного поиска в WordPress с фильтрацией по категориям и тегам может значительно улучшить UX вашего сайта, позволяя пользователям быстро находить нужный контент. Следуя этим рекомендациям, вы обеспечите необходимую функциональность, а также повысите общий уровень удовлетворенности пользователей.