Простой способ искать только пользовательские типы записей

Вопрос или проблема

Я просто пытаюсь найти способ сузить мой текущий поисковой бар так, чтобы он искал только в моем пользовательском типе записей ‘events’.

Я не хочу, чтобы поиск индексировал какой-либо другой тип записей, только ‘events’.

Вот поисковой бар:

<form id="searchform" action="http://localhost:8888/ltc" method="get">
        <input class="inlineSearch" type="text" name="s" value="Введите ключевое слово" onblur="if (this.value == '') {this.value='Введите ключевое слово';}" onfocus="if (this.value == 'Введите ключевое слово') {this.value='';}" />
        <input class="inlineSubmit" id="searchsubmit" type="submit" alt="Поиск" value="Поиск" />
    </form>

И файл search.php:

<?php if ( have_posts() ) : ?>
            <h1><?php printf( __( 'Результаты поиска для: %s', 'twentyten' ), '' . get_search_query() . '' ); ?></h1>
            <?php
            /* Запустите цикл для поиска, чтобы вывести результаты.
             * Если вы хотите переопределить это в дочерней теме, включите файл
             * с именем loop-search.php, и он будет использован вместо.
             */
             get_template_part( 'loop', 'search' );
            ?>

(Я еще не редактировал стандартную страницу search.php, так как сначала хочу правильно настроить индексацию)

Спасибо

Для поиска по пользовательскому типу записей вы можете добавить к запросу &post_type=events, для этого просто отредактируйте вашу форму следующим образом:

<form id="searchform" action="http://localhost:8888/ltc" method="get">
        <input class="inlineSearch" type="text" name="s" value="Введите ключевое слово" onblur="if (this.value == '') {this.value='Введите ключевое слово';}" onfocus="if (this.value == 'Введите ключевое слово') {this.value='';}" />
        <input type="hidden" name="post_type" value="events" />
        <input class="inlineSubmit" id="searchsubmit" type="submit" alt="Поиск" value="Поиск" />
</form>

Вы можете сделать это для любого типа записей (он должен быть существующим, иначе будет игнорироваться) и это будет работать отлично.

Чтобы ознакомиться с Hansy, посмотрите мой пост здесь: искать только страницы, если на странице, чтобы использовать радиокнопки для предоставления пользователям возможности выбрать, что они хотят искать.

Чтобы искать пользовательскую запись, вам просто нужно указать тип записи в разделе значения.
например: мой пользовательский тип записи “blogpst”. Теперь посмотрите, что я сделал на самом деле во втором поле ввода

<input type="hidden" name="post_type" value="blogpst" />

Видите, что я сделал. Я просто указал тип записи в разделе значения.

В моем случае функция поиска работала отлично. Мне просто нужно было отфильтровать запрос, чтобы искать только тип записи Learndash Courses. Вот что я сделал:

// Фильтрует поисковый запрос, чтобы включать только тип записи 'sfwd-courses'
function fn_search_courses_only($query) {
 if ($query->is_search && !is_admin()) {
  $query->set('post_type', 'sfwd-courses');
 }
 return $query;
}
add_filter('pre_get_posts', 'fn_search_courses_only');

Ответ или решение

Запрос на поиск только в индивидуальных типах записей, таких как "события", является довольно распространённой задачей при разработке на WordPress. Это позволяет сделать функциональность поиска более целенаправленной и улучшить пользовательский опыт. В данном руководстве мы разберём, как настроить форму поиска таким образом, чтобы она ограничивала результаты только определённым типом записей.

Шаг 1: Обновление формы поиска

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

<form id="searchform" action="http://localhost:8888/ltc" method="get">
    <input class="inlineSearch" type="text" name="s" value="Введите ключевое слово" onblur="if (this.value == '') {this.value='Введите ключевое слово';}" onfocus="if (this.value == 'Введите ключевое слово') {this.value='';}" />
    <input type="hidden" name="post_type" value="events" />
    <input class="inlineSubmit" id="searchsubmit" type="submit" alt="Поиск" value="Поиск" />
</form>

Обратите внимание на строку

<input type="hidden" name="post_type" value="events" />

Этот элемент позволяет добавить значение events к вашему поисковому запросу, ограничивая поиск именно этой категорией постов.

Шаг 2: Обработка поискового запроса

Хотя указание параметра post_type в форме уже будет ограничивать поиск нужным типом постов, вы также можете дополнительно использовать фильтры WordPress, чтобы улучшить обработку поисковых запросов. Это можно сделать в файле functions.php вашей темы. Добавьте следующий код:

function fn_search_events_only($query) {
    if ($query->is_search && !is_admin()) {
        $query->set('post_type', 'events');
    }
    return $query;
}
add_filter('pre_get_posts', 'fn_search_events_only');

Этот код будет проверять, является ли текущий запрос поисковым и не происходит ли он в административной панели. Если эти условия выполняются, запрос будет адаптирован для поиска только в типе записей "события".

Шаг 3: Настройка результатов поиска

Теперь, когда ваш поиск настроен, важно удостовериться, что результаты отображаются корректно. Проверьте файл search.php, чтобы убедиться, что он правильно обрабатывает результаты. При использовании get_template_part( 'loop', 'search' );, убедитесь, что в вашем файле loop-search.php корректно выводятся поля, которые вы хотите отобразить.

Заключение

Следуя вышеуказанным шагам, вы сможете настроить функционал поиска в WordPress так, чтобы он ограничивался только вашим индивидуальным типом запись "события". Это не только сделает ваш поиск более целенаправленным, но и улучшит взаимодействие пользователей с вашими данными.

Не забывайте тестировать функциональность поиска и проверять, что результаты соответствуют введённым запросам. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...