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(' — '); 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
Просмотров: 34999
Правила перепечатки
5 последних уроков рубрики "Wordpress"
-
Почему WordPress лучше чем Joomla ?
Этот урок скорее всего будет психологическим, т.к. многие люди работают с WordPress и одновременно с Joomla, но не могут решится каким CMS пользоваться.
-
Про шаблоны WordPress
После установки и настройки движка нам нужно поработать с дизайном нашего сайта. Это довольно долгая тема, но мы постараемся рассказать всё кратко и ясно.
-
Самые первые настройки после установки движка WordPress
Сегодня мы вам расскажем какие первые настройки нужно сделать после установки движка WordPress. Этот урок будет очень полезен для новичков.
-
10 стратегий эффективного продвижения статей в блогах на WordPress
Продвижение статей в блоге - непростая задача. Часто бывает, что вы пишете действительно хороший контент, включаете визуальные эффекты, делаете правильные корректировки SEO, но это не дает ожидаемого результата.
-
Топ WordPress альтернатив для создания персонального сайта
Нужен персональный сайт, но вы не хотите задействовать WordPress? Тогда данная подборка для вас.