/ Wordpress / Поиск по сайту

Поиск по сайту

HIT

29.06.2015

1703

Поиск по сайту — важнейший инструмент позволяющий находить на сайте любую информацию.

Плагины расширяющие функционал поиска

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));
Измененные правила выборки поиска будут также относится и к админке, чтобы этого избежать нужно обернуть содержимое функции условием if( !is_admin() )
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)] ];
}

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Счетчик просмотра страниц

Счетчик просмотра страниц

Счетчик просмотра страниц Создаем счетчик просмотра страниц сайта. Для того чтобы фиксировать и выводить статистику просмотра страницы, нужно поместить код в functions.php // Счетчик количества просмотров страниц function getPostViews($postID){ $count_key Читать далее »

Upgrade WC

Upgrade WC

Очередная серия улучшений (upgrade) плагина WC. Буду добавлять по мере изучения новые решения. Поиск по SKU (артикулу) Из коробки WC не ищет по артикулам (SKU). Но достаточно установить плагин Search Читать далее »

/
Манипуляции с датами

Манипуляции с датами

Русскоязычный формат дней недели и месяцев Добавляем на сайт функцию, которая приводит вывод даты (месяцы, дни недели) в человеческий вид.Помещаем в файл functions вывод: если нужна дата поста, то: Вывод Читать далее »

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

Пока нет комментариев. Будь первым!

Поиск по сайту
Filter и Action
Рекомендации для васFilter и ActionOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.