Поиск по сайту — важнейший инструмент позволяющий находить на сайте любую информацию.
Плагины расширяющие функционал поиска
Relevanssi — A Better Search (100 000) — улучшает и расширяет результаты поиска, более релевантные результаты. Сейчас называется Relevanssi — Лучший поиск.
FiboSearch — Ajax Search for WooCommerce (100 000+) — превосходный плагин. Выводит ajax результаты поиска по товарам. Также выводит и названия найденных категорий. Есть шорткод для вывода строки поиска.
Стандартная форма поиска wordpress
<div id="sea">
<form method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>" role="search">
<button type="submit" id="pic-sea" value=""><i class="fa fa-search"></i></button>
<input type="text" name="s" class="" id="s" placeholder="Поиск" />
</form>
</div>
CSS Формы поиска
#sea {
top: 50%;
left: 50%;
position: fixed;
z-index: 9999;
opacity: 0;
width: 100px;
transition: opacity .5s ease;
}
.sea-2 {opacity: 1 !important;}
#searchform {padding:0; background:none;}
#s {
padding: 10px;
transition: width .3s ease-in-out;
border: none;
box-sizing: border-box;
position: absolute;
right: 0;
z-index: 98;
}
#pic-sea {
padding: 10px;
border: none;
position: absolute;
right: 0;
background-color: rgb(224, 22, 52);
transition: background-color .3s ease;
color: #fff;
z-index: 99;
}
#pic-sea .fa {color: #fff !important;}
#pic-sea:hover {background-color: rgb(153, 8, 21);}
#searchform .fa {padding: 0 !important;}
Форма поиска по товарам woocommerce
<div id="sea">
<form id="searchform" class="woocommerce-product-search" action="<?php echo esc_url( home_url( '/' ) ); ?> " method="get" role="search">
<button id="pic-sea" type="submit" value=""><i class="fa fa-search"></i></button>
<input id="s" name="s" type="text" placeholder="Поиск" />
<input name="post_type" type="hidden" value="product" />
</form>
</div>
Исключение из поиска
Исключить из поиска вывод странниц (page) — надо добавить код в functions
function searchExcludePages($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','searchExcludePages');
Можно исключить определенные категории из поиска (добавив в код выше)
для одной категории
$query->set('category__not_in','5');
для нескольких категорий
$query->set('category__not_in',array(74,75,5));
function searchExcludePages($query) {
if( !is_admin() ) {
if ($query->is_search) {
$query->set('category__not_in',array(75,5,74,182,172,188));
$query->set('post_type', 'post');
}
return $query;
}
}
add_filter('pre_get_posts','searchExcludePages');
Чтобы не выводить в поиске пользовательские типы записей, необходимо в функции назначения типа записи добавить параметр ‘exclude_from_search’ => true
Единственный результат поиска
Перенаправляем пользователя на запись, если найден единственный результат поиска (в поиске woocommerce реализовано по-умолчанию), в файл functions.php
// Перенаправление на запись, если в поиске единственный результат
add_action('template_redirect', 'redirect_single_post');
function redirect_single_post() {
if (is_search()) {
global $wp_query;
if ($wp_query->post_count == 1) {
wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
}
}
}
Кнопка развертывания поиска при наведении (CSS выше)
/* Кнопка развертывания поиска */
$('#sea').hover(function() {
$('#s').toggleClass('s2');
});
Обязательное поле
Можно сделать поле формы поиска обязательным для заполнения (хотя бы один символ). Данный атрибут поддерживается в современных версиях браузеров, поддерживающих HTML5.
<input required type="text" name="s" class="" id="s2" placeholder="Поиск по сайту.." />
Вывод количества результатов поиска
Для того чтобы грамотно выводить результаты поиска, необходимо использование регулярных выражений для слова «результат»:
<p id="count-search"><?php
if ($wp_query->found_posts == 0) {
echo 'Нет записей удовлетворяющих запросу';
} else {
plural_form_2( $wp_query->found_posts, array('Найдена ','Найдены ','Найдено ') );
echo $wp_query->found_posts;
plural_form_2( $wp_query->found_posts, array(' запись',' записи',' записей') );
}
?></p>
Функция регулярности:
//Регулярное выражение (без вывода количества)
function plural_form_2($number, $after) {
$cases = array (2, 0, 1, 1, 1, 2);
echo $after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}
[site-socialshare]