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

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

HIT

29.06.2015

1499

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

Relevanssi

Relevanssi — A Better Search — плагин расширяющий функционал поиска

Стандартная форма поиска 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)] ];
}

Тэги: ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Переменный стиль

Переменный стиль

Если нужно сделать для четных и нечетных элементов разные классы. Поместить в funсtions.php function cycle(&$arr) { $arr[] = array_shift($arr); return end($arr); } $oddEven = array('even', 'odd'); В блоке изменяемого стиля Читать далее »

Список меток текущей категории

Список меток текущей категории

Формируем и выводим список меток текущей категории. Вариант в файл funсtion.php function get_category_tags($cats) { global $wpdb; $tags = $wpdb->get_results (" SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, t2.count as Читать далее »

/
Функция действующая на конкретный раздел

Функция действующая на конкретный раздел

Создадим функцию, которая будет действовать на конкретный раздел сайта, в частности на конкретную категорию woocommerce. Задачу разобьем на 2 этапа: выборка категорий необходимых для воздействия и непосредственно функция. Вывод определенного Читать далее »

/

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

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

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