Простой способ поиска только по произвольным типам записей
Я пытаюсь найти способ ограничить мою текущую строку поиска так, чтобы она искала только в пределах моего произвольного типа записей '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>
Вы можете сделать это для любого типа записи (он должен существовать, иначе будет проигнорирован), и это будет работать корректно.

В моем случае функциональность поиска работала идеально. Мне просто нужно было отфильтровать запрос, чтобы искать только записи типа Learndash Courses. Вот что я сделал:
// Фильтрует поисковый запрос, чтобы включать только тип записи 'sfwd-courses'
function fn_search_courses_only($query) {
if( $query->is_search && ! is_admin() ) {
$query->set( 'post_type', 'sfwd-courses' );
}
}
add_action( 'pre_get_posts', 'fn_search_courses_only' );

Чтобы выполнить поиск по пользовательскому типу записи, вам просто нужно указать тип записи в разделе значения.
Пример: Мой пользовательский тип записи называется "blogpst". Теперь посмотрите, что я сделал во втором поле ввода:
<input type="hidden" name="post_type" value="blogpst" />
Видите, что я сделал? Я просто указал тип записи в разделе значения.
