8 полезных сниппетов для поиска в WordPress

Не секрет, что стандартный поиск в WordPress не очень точный. Проблема заключается в том, что WordPress ищет термины в весьма широком диапазоне, подразумевая, что если вы написали в строке поиска "урок+CSS+меню", то нужно выдать каждую запись, где встречается хотя бы один из терминов, что приводит к большому объему найденных материалов. Поэтому, не смотря на большую кучу найденного, пользователь в действительности не получает то, что ему нужно. Такое положение необходимо исправить и улучшить.

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

Как исключить записи и страницы из результатов поиска

Если вам действительно нужно управлять тем, какие записи и страницы будут исключаться из результатов поиска WordPress, скопируйте ниже приведенный код в файл functions.php

В данном сниппете записи с ID 0 и 1 будут исключаться из результатов поиска. Исправьте код так, как вам нужно.

function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('cat','0,1');
    }
    return $query;
}

add_filter('pre_get_posts','SearchFilter');

Форма поиска WordPress с выпадающим списком категорий

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

Нужно заменить стандартную форму поиска WordPress (ее можно найти в файле searchform.php) ниже приведенным сниппетом:

<form role="search" method="get" id="searchform" action="<?php bloginfo('siteurl'); ?>">
  <div>
    <label class="screen-reader-text" for="s">Ищем:</label>
    <input type="text" value="" name="s" id="s" />
    in <?php wp_dropdown_categories( 'show_option_all=All Categories' ); ?>
    <input type="submit" id="searchsubmit" value="Искать" />
  </div>
</form>

Поиск только в определенной категории и ее категориях наследниках

Данная форма может быть полезна в архиве категорий, чтобы позволить читателям искать категории наследники для любой заданной родительской категории.

В приведенном сниппете будут просматриваться все категории наследники от категории с ID 1. Исправьте код так, как вам нужно.

<form method=”get” id=”searchform” action=”<?php bloginfo(‘home’); ?>/”>
<div id=”search”>
<input type=”text” value=”Ищем… ” onclick=”this.value=”;” name=”s” id=”s” />
<?php $categories = get_categories(‘child_of=1′);
$catlist = ”;
foreach ($categories as $cat) {
$catlist.= $cat->cat_ID.’,';
}
$catlist.’5′;
?>
<input type=”hidden” name=”cat” value=”<?php echo “$catlist”?>” />
<input name=”" type=”image” src=”<?php bloginfo(‘stylesheet_directory’); ?>/styles/<?php echo “$style_path”; ?>/search.gif” value=”Искать” class=”btn” />
</div><!–/search –>
</form>

Поиск определенного типа записей

WordPress позволяет организовать поиск определенного типа записей с помощью небольшого сниппета.

Нужно скопировать ниже приведенный код в файл functions.php.

function SearchFilter($query) {
  if ($query->is_search) {
    // Вставьте определенный тип записей, который нужно искать
    $query->set('post_type', 'feeds');
  }
  return $query;
}

// Данный фильтр будет встроен в цикл и будет сортировать результат поиска перед выводом
add_filter('pre_get_posts','SearchFilter');

Выводим количество найденных материалов

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

Откройте файл search.php и найдите следующую строку:

<h2 class="pagetitle">Search Results</h2>

И замените ее кодом:

<h2 class="pagetitle">Результат поиска <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' &mdash; '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

Подсвечиваем термин поиска WordPress с помощью jQuery

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

Скопируйте следующий код в файл functions.php:

function hls_set_query() {
  $query  = attribute_escape(get_search_query());

  if(strlen($query) > 0){
    echo '
      <script type="text/javascript">
        var hls_query  = "'.$query.'";
      </script>
    ';
  }
}

function hls_init_jquery() {
  wp_enqueue_script('jquery');
}

add_action('init', 'hls_init_jquery');
add_action('wp_print_scripts', 'hls_set_query');

А следующий код добавьте в файл header.php перед тегом /head:

<style type="text/css" media="screen">
    .hls { background: #D3E18A; }
  </style>
  <script type="text/javascript">
  jQuery.fn.extend({
    highlight: function(search, insensitive, hls_class){
      var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g");
      return this.html(this.html().replace(regex, function(a, b, c){
        return (a.charAt(0) == "<") ? a : "<strong class=\""+ hls_class +"\">" + c + "</strong>";
      }));
    }
  });
  jQuery(document).ready(function($){
    if(typeof(hls_query) != 'undefined'){
      $("#post-area").highlight(hls_query, 1, "hls");
    }
  });
  </script>

Отключаем поиск WordPress

Если вам нужно полностью отключить функционал поиска WordPress, вы можете использовать следующий небольшой сниппет.

Его нужно скопировать в самый конец файла functions.php.

function fb_filter_query( $query, $error = true ) {

	if ( is_search() ) {
		$query->is_search = false;
		$query->query_vars[s] = false;
		$query->query[s] = false;

		// Ошибка
		if ( $error == true )
			$query->is_404 = true;
	}
}

add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

Снимаем ограничения с количества найденных материалов в результатах поиска WordPress

Иногда нужно, чтобы результаты поиска не имели стандартных ограничений цикла поиска WordPress. Данный сниппет позволяет получать неограниченное количество материалов в результате поиска.

В файле search.php вы можете добавить следующий код выше цикла, чтобы он работал.

Сначала найдите следующие строки в файле search.php:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

И измените код, добавим выше найденного одну строку:

<?php $posts=query_posts($query_string . '&posts_per_page=-1'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: speckyboy.com/2010/09/19/10-useful-wordpress-search-code-snippets/
Перевел: Сергей Фастунов
Урок создан: 6 Октября 2010
Просмотров: 33722
Правила перепечатки


5 последних уроков рубрики "Wordpress"

^ Наверх ^