При вводе поискового запроса удобно чтобы сразу выводились несколько вариантов с ссылками на страницы с искомым словосочетанием. Реализуем это минимальными действиями.
Подлючение скрипта и стилей
Подключаем все необходимые стили и скрипты
add_action( 'init', 'myprefix_autocomplete_init' );
function myprefix_autocomplete_init() {
wp_register_style( 'myprefix-jquery-ui', plugins_url('/site-ajax-search.css', __FILE__));
wp_register_script( 'my_acsearch', plugins_url('/myacsearch.js', __FILE__), array('jquery','jquery-ui-autocomplete'),null,true);
add_action( 'get_search_form', 'myprefix_autocomplete_search_form' );
add_action( 'wp_ajax_myprefix_autocompletesearch', 'myprefix_autocomplete_suggestions' );
add_action( 'wp_ajax_nopriv_myprefix_autocompletesearch', 'myprefix_autocomplete_suggestions' );
}
function myprefix_autocomplete_search_form(){
wp_localize_script( 'my_acsearch', 'MyAcSearch', array('url' => admin_url( 'admin-ajax.php' )));
wp_enqueue_script( 'my_acsearch' );
wp_enqueue_style( 'myprefix-jquery-ui' );
}
Создание jquery передатчика
Содержимое подключенного файла со скриптом myacsearch.js
#s2 — этот id должен быть id input формы поиска!
jQuery(document).ready(function ($){
var acs_action = 'myprefix_autocompletesearch';
$("#s2").autocomplete({
source: function(req, response){
$.getJSON(MyAcSearch.url+'?callback=?&action='+acs_action, req, response);
},
select: function(event, ui) {
window.location.href=ui.item.link;
},
minLength: 3,
});
});
Функция обработчик
function myprefix_autocomplete_suggestions(){
// Query for suggestions
$posts = get_posts( array(
's' =>$_REQUEST['term'],
) );
// Initialise suggestions array
$suggestions=array();
global $post;
foreach ($posts as $post): setup_postdata($post);
// Initialise suggestion array
$suggestion = array();
$suggestion['label'] = esc_html($post->post_title);
$suggestion['link'] = get_permalink();
// Add suggestion to suggestions array
$suggestions[]= $suggestion;
endforeach;
// JSON encode and echo
$response = $_GET["callback"] . "(" . json_encode($suggestions) . ")";
echo $response;
// Don't forget to exit!
exit;
}
Настройки обработчика
Обработчик в том виде как он здесь представлен ищет по стандартным типам записей — post. Чтобы поиск выдавал, например товары woocommerce нужно в запросе get_posts указать тип записи ‘post_type’ => ‘product’. Также исходно при вводе выпадает 5 вариантов (5, потому что у get_posts — это количество по-умолчанию). Чтобы сделать другое количество вариантов — надо добавить строку ‘numberposts’ => 10.
Стили CSS
Данный стиль — это сильно сокращенная версия подключаемого стиля jquery-ui.css
/* Варианты при вводе в поиск */
.ui-helper-hidden-accessible {display: none;}
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.ui-autocomplete { position: absolute; cursor: default; }
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
float: left;
background-color: #fff;
border: 1px solid #2196F3;
z-index: 99;
}
.ui-menu .ui-menu {margin-top: -3px;}
.ui-menu .ui-menu-item {
margin:0;
padding: 2px 0;
float: left;
clear: left;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-state-focus {background-color: #a4e3ff; cursor: pointer;}
[site-socialshare]
