8 корисних сніппетів для пошуку у WordPress
На превеликий жаль WordPress не володіє надточним пошуком, чи хоча б зручним… Відвідувач вводячи в пошуку “8 корисних сніппетів” побачить весь список дописів в яких хоча б раз зустрічається одне з слів. Це не є досить зручним, але на щастя, є хоча б і не значні, але корисні функції, які можна додати до вашого шаблону.
І не забуваємо, що такі функції є корисними не тільки для відвідувачів – а й для вас, так як в результаті втрачає не відвідувач, втрачаєте ви – відвідувача :)
І так, маємо 8 сніппетів, які поліпшать весь процес пошуку.
1) Як виключити записи і сторінки з результатів пошуку
Якщо вам потрібно виключити з пошуку якісь конкретні сторінки, то наступний код вставляємо в functions.php
В даному коді будуть виключені записи з ID 0 і 1. Підправляємо ID під ваші потреби.
1 2 3 4 5 6 7 8 |
function SearchFilter($query) { if ($query->is_search) { $query->set('cat','0,1'); } return $query; } add_filter('pre_get_posts','SearchFilter'); |
2) Форма пошуку WordPress з випадаючим списком категорій
Дозволяє відвідувачу вибрати категорію в якій здійснити пошук. Насправді дуже корисна функція.
Виглядає наступним чином:
В searchform.php шукаємо вашу форму виводу пошуку і замінюємо її наступним кодом:
1 2 3 4 5 6 7 8 |
<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" /> з <?php wp_dropdown_categories( 'show_option_all=All Categories' ); ?> <input type="submit" id="searchsubmit" value="Шукати" /> </div> </form> |
3) Пошук тільки в певної категорії та її підкатегоріях
Дана форма може бути корисна в архівах категорій, щоб дозволити читачам шукати підкатегорії для будь-якої заданої батьківської категорії.
В наступному коді будуть розглядатись всі підкатегорії з категорії ID 1. Підправляємо під свої цілі. Додаємо в searchform.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<form method=”get” id=”searchform” action=”<?php bloginfo(‘); ?>/”> <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(‘); ?>/styles/<?php echo “$style_path”; ?>/search.gif” value=”Пошук” class=”btn” /> </div><!–/search –> </form> |
4) Пошук певного типу записів
Думаю з назви все зрозуміло :) Вставляємо в functions.php
1 2 3 4 5 6 7 8 9 10 |
function SearchFilter($query) { if ($query->is_search) { // Вставте певний тип записів, який потрібно шукати $query->set('post_type', 'feeds'); } return $query; } // Даний фільтр буде вбудований в цикл і буде сортувати результат пошуку передвиведенням add_filter('pre_get_posts','SearchFilter'); |
5) Виводимо кількість знайдених матеріалів
Інколи корисно знати скільки результатів пошуку. В файлі search.php шукаємо, приблизно, наступний код:
1 |
<h2 class="pagetitle">Search Results</h2> |
І замінюємо його на:
1 |
<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> |
6) Підсвічує знайдене пошуком WordPress за допомогою jQuery
Корисна функція для пошуку, дає можливість відразу сконцентруватись на необхідному.
Копіюємо наступний код в functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<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> |
7) Відключаємо пушук WordPress
Якщо нам взагалі непотрібний пошук, відключаємо його наступним кодом.
Код додаємо в functions.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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;" ) ); |
8) Знімаємо обмеження з кількості знайдених матеріалів в результатах пошуку WordPress
Інколи потрібно, щоб пошук не мав стандартного обмеження циклу пошуку. В файлі search.php додаємо наступний код, але вище цикла, для цього шукаємо наступний код:
1 2 |
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> |
І замінюємо його на:
1 2 3 |
<?php $posts=query_posts($query_string . '&posts_per_page=-1'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> |
Тобто додаємо одну стрічку, вище циклу.
Пані та Панове, прошу зважати на те, що кожна тема в WordPress є унікальна і якщо ви використовуєте безплатні шаблони, будьте готові до конфліктних ситуацій в темі і не забуваємо про CSS стилі, які теж можуть бути причиною некоректного виводу функцій…
Якщо у вас виникли проблеми, чи взагалі зник пошук, ви можете переглянути статтю: “Як додати пошук у WordPress без плагіну”, по назві зрозуміло про, що йде мова :)
На цьому завершую. Надіюсь вам стане корисна дана інформація. Успіхів!