Статьи

Как ограничить результаты поиска WordPress

Все мы знаем, что функция поиска WordPress по умолчанию не очень хороша или, по крайней мере, не так хороша, как Google 🙂, но есть несколько уловок, которые помогут улучшить результаты поиска. В этом сообщении будут показаны различные методы ограничения результатов поиска определенными типами или категориями сообщений, а также способы изменения количества по умолчанию или результатов поиска на странице.

Ограничьте результаты поиска WordPress по категориям

Вот несколько методов, которые вы можете использовать для ограничения результатов поиска по категориям, которые могут быть очень полезны для таких сайтов, как WPExplorer.com, на которых есть такие разделы, как темы, плагины и блог.

1 Использование скрытого поля ввода в Searchform.php

Это метод, который я сейчас использую на WPExplorer.com, поэтому при поиске на основном сайте люди будут получать результаты поиска только из категории «Темы WordPress». Все, что вам нужно сделать, это добавить скрытый ввод в ваш searchform.php с идентификатором «cat» и идентификатором категории для значения.

Базовый searchform.php

<form method=»get» action=»<?php echo esc_url( home_url( «https://techblog.sdstudio.top/») ); ?>»>
<input type=»text» size=»16″ name=»s» value=»Search» />
<input type=»submit» value=»Go» />
</form>

Добавьте следующее, чтобы ограничить категорию с идентификатором 5

<input type=»hidden» name=»cat» id=»cat» value=»5″ />

Полный код

<form method=»get» action=»<?php echo esc_url( home_url( «https://techblog.sdstudio.top/») ); ?>»>
<input type=»hidden» name=»cat» id=»cat» value=»5″ />
<input type=»text» size=»16″ name=»s» value=»Search» />
<input type=»submit» value=»Go» />
</form>

2 Добавление запроса в файл Search.php

Еще один полезный метод ограничения результатов поиска определенными категориями – это добавить запрос в файл search.php прямо перед оператором if.

Включение категорий в поиск

Используя положительные идентификаторы в запросе, вы можете определить, какие категории вы хотите отображать в результатах поиска (показать категории с идентификаторами 1,2 и 3).

<?php
$paged = (get_query_var(‘paged’) )? get_query_var(‘paged’): 1;
query_posts( «s=$s&paged=$paged&cat=1,2,3» );
?>

Исключение категорий из поиска

В качестве альтернативы вы можете использовать отрицательные идентификаторы, чтобы исключить определенные категории со страницы поиска (исключите категорию с идентификатором 7).

<?php
$paged = (get_query_var(‘paged’) )? get_query_var(‘paged’): 1;
query_posts( «s=$s&paged=$paged&cat=-7» );
?>

Исключить страницы со страницы поиска

Ниже приведены несколько способов ограничить результаты поиска, чтобы исключить страницы из результатов и отображать только сообщения.

Использование функции

Просто вставьте следующую функцию в свой файл functions.php

// Remove pages from search results
function exclude_pages_from_search($query) {
if ($query->is_main_query() && is_search()) {
$query->set( ‘post_type’, ‘post’ );
}
return $query;
}
add_filter( ‘pre_get_posts’,’exclude_pages_from_search’ );

Использование условия в файле Search.php

Другой способ удалить страницы из файла search.php – вставить условие в файл search.php сразу после «while (have_posts())». Это не рекомендуется, если вы используете стороннюю тему, потому что, если вы обновите тему в будущем, вы потеряете свои правки, если это ваша собственная тема, тогда все в порядке.

<?php
if (have_posts() ): while (have_posts() ): the_post();
// Exclude pages from the loop
if (is_search() && ($post->post_type==’page’) ) {
continue;
} ?>

Исключить определенную страницу или страницы

Вы также можете исключить определенные сообщения / страницы из страниц результатов поиска по их идентификаторам, используя следующий код, добавленный в файл functions.php. Просто измените массив идентификаторов, включив в него идентификаторы страниц или сообщений, которые вы хотите исключить.

// Exclude specific posts/pages from search
function exclude_pages_from_search($query) {
if ($query->is_main_query() && is_search()) {
$exclude_ids = array( 7, 19, 21 ); // Array of the ID’s to exclude
$query->set( ‘post__not_in’, $exclude_ids );
}
return $query;
}
add_filter( ‘pre_get_posts’,’exclude_pages_from_search’ );

Ограничить поиск типом сообщения

Одна из причин использования типов портов в WordPress заключается в том, что вы не хотите, чтобы они присутствовали в вашем фиде или основном цикле wp, поэтому они идеально подходят для таких вещей, как слайдеры, отзывы, услуги и т.д. Однако ваши персонализированные сообщения могут по-прежнему отображаться на странице результатов поиска.

1 Исключить произвольный тип сообщения из результатов поиска

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

‘exclude_from_search’ => true

2 Использование скрытого поля в форме поиска для отображения только сообщений из определенного настраиваемого типа сообщений.

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

<input type=»hidden» name=»post_type» value=»portfolio» />

Это дополнительное поле войдет в вашу форму поиска, и вы просто замените там, где написано «портфолио», на свое собственное имя типа записи. Этот метод отлично подходит, если на вашем сайте есть определенный раздел, в котором используются настраиваемые типы сообщений, и вы хотите, чтобы пользователи могли выполнять поиск только по этим конкретным сообщениям.

Изменение количества результатов на странице

По умолчанию WordPress использует число, указанное в разделе «Настройки»> «Чтение» (страницы блога показывают не более…), чтобы определить, сколько результатов будет отображаться на странице результатов поиска. Если вы хотите, чтобы на странице поиска отображалось больше, меньше или бесконечное количество результатов, вы можете сделать это, используя следующий код:

// Alter search posts per page
function myprefix_search_posts_per_page($query) {
if ($query->is_search) {
$query->set( ‘posts_per_page’, ’10’ );
}
return $query;
}
add_filter( ‘pre_get_posts’,’myprefix_search_posts_per_page’ );

Этот код войдет в ваш файл functions.php. Желательно в вашей дочерней теме, если вы работаете с темой от другого разработчика. Код установит для результатов поиска «10» на страницу. Вы можете изменить номер на все, что захотите. Для неограниченного использования результатов поиска используйте -1. Или используйте такой плагин, как Toolset Search, чтобы добавить нумерацию страниц к вашим результатам.

Расширенный / лучший поиск

WordPress по умолчанию выполняет поиск на основе любого контента внутри ваших сообщений и страниц. Можно было бы изменить способ работы поиска с помощью функций, но это довольно сложно, поэтому, если вы хотите изменить способ, которым фактически работает поиск (что он ищет), вы можете вместо этого использовать плагин, такой как плагин расширенного поиска WP. Нажмите на баннер ниже, чтобы проверить его, или найдите его на панели инструментов WordPress в разделе «Плагины»> «Добавить новый».

Как ограничить результаты поиска WordPress

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Кнопка «Наверх»

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: