Wordpress поиск почты с jquery ajax автозаполнением - PullRequest
0 голосов
/ 22 января 2020

Я использую Jquery автозаполнение для поиска в WordPress. Все работает нормально, но мне нужно поставить ссылку на результат поиска. Поэтому, когда кто-то выбирает, страница результатов будет перенаправлена. Может кто-нибудь, пожалуйста, помогите мне с тем, как я могу поставить ссылку. Вот мой PHP код

function ja_ajax_search() {
$results = new WP_Query( array(
    'post_type'     => array( 'knowledge_base' ),
    'post_status'   => 'publish',
    'nopaging'      => true,
    'posts_per_page'=> 100,
    's'             => stripslashes( $_POST['search'] ),
) );
$items = array();
if ( !empty( $results->posts ) ) {
    foreach ( $results->posts as $result ) {
$item = array();
$item['title'] = $result->post_title;
        $item['link'] = get_the_permalink($result->ID);
        $items[] = $item;
    }
}
wp_send_json_success( $items );
}
add_action( 'wp_ajax_search_site','ja_ajax_search' );
add_action( 'wp_ajax_nopriv_search_site', 'ja_ajax_search' );

Вот мой jquery код

jQuery(function($){
var searchRequest;
$('.search-autocomplete').autoComplete({
    minChars: 2,
    autoFocus: true,
    source: function(term, suggest){
        try { searchRequest.abort(); } catch(e){}
        searchRequest = $.post(global.ajax, { search: term, action: 'search_site' }, function(res) {
            suggest(res.data);
        });
    }
});
});

1 Ответ

0 голосов
/ 22 января 2020

Вы можете сделать это таким образом. Просто замените его на ваш.

jQuery(function($){
var searchRequest;
$('.search-autocomplete').autoComplete({
    minChars: 2,
    autoFocus: true,
    source: function(name, suggest){
        try { searchRequest.abort(); } catch(e){}
        searchRequest = $.post(global.ajax, { search: name, action: 'search_site' }, function(data) {

            var results = [];
            for (var index = 0; index < data.results.length; index++) 
                if (~(data.results[index]['title']+' '+data.results[index]['link']).toLowerCase().indexOf(name)) results.push(data.results[index]);
            suggest(results);
        });
    },
    renderItem: function (item, search){
        search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi");     
        return '<div class="autocomplete-suggestion" data-title="'+item['title']+'" data-link="'+item['link']+'" data-val="'+search+'">'+ item['title'].replace(re, "<b>$1</b>") + '</div>';
    },
    onSelect: function(e, term, item) {
        var link = item.data('link');
        window.open(link); 
    }
});
});

Ваш код PHP должен быть

function ja_ajax_search() {
$results = new WP_Query( array(
    'post_type'     => array( 'knowledge_base' ),
    'post_status'   => 'publish',
    'nopaging'      => true,
    'posts_per_page'=> 100,
    's'             => stripslashes( $_POST['search'] ),
) );
$items = array();
if ( !empty( $results->posts ) ) {
    foreach ( $results->posts as $result ) {
$item = array();
$item['title'] = $result->post_title;
        $item['link'] = get_the_permalink($result->ID);
        $items[] = $item;
    }
}
echo json_encode(array('results'=>$items));
die();
}
add_action( 'wp_ajax_search_site','ja_ajax_search' );
add_action( 'wp_ajax_nopriv_search_site', 'ja_ajax_search' );

Я не тестировал, но сообщите мне результаты, чтобы я мог помочь вам, если он не работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...