Ajax в поиске вместо пагинации
Стоит у меня форма поиска:
<div class="search-position"> <form method="get" action="/" id="search-block-form" class="search_icon"> <div class="form-item"> <input autocomplete="off" class="search-field" type="text" name="s" placeholder="Поиск по сайту" size="15" maxlength="128"> </div> </form> <ul class="codyshop-ajax-search"></ul> </div>
Скрипт
jQuery(function($){
$('#true_loadmore4').click(function(){
$(this).text('Показываю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
var data = {
'action': 'loadmore4',
'page' : current_page
};
$.ajax({
url:ajaxurl, // обработчик
data:data, // данные
type:'POST', // тип запроса
success:function(data){
if( data ) {
$('#true_loadmore4').text('Показать ещё').before(data); // вставляем новые посты
current_page++; // увеличиваем номер страницы на единицу
if (current_page == max_pages) $("#true_loadmore4").remove(); // если последняя страница, удаляем кнопку
} else {
$('#true_loadmore4').remove(); // если мы дошли до последней страницы постов, скроем кнопку
}
}
});
});
});
В functions.php
function true_load_posts4(){
$args4 = json_decode( stripslashes( $_POST['query'] ), true );
$args4['post_type'] = array('post');
$args4['paged'] = $_POST['page'] + 1;
// обычно лучше использовать WP_Query, но не здесь
query_posts( $args4 );
// если посты есть
if( have_posts() ) :
// запускаем цикл
while( have_posts() ): the_post();
include(TEMPLATEPATH. '/includes/home_search.php');
endwhile;
wp_reset_postdata();
endif;
die();
}
add_action('wp_ajax_loadmore4', 'true_load_posts4');
add_action('wp_ajax_nopriv_loadmore4', 'true_load_posts4');
Ну и в файле темы search.php вывод новостей такого типа
rewind_posts();
if (have_posts()) {
while (have_posts()) : the_post();
include(TEMPLATEPATH. '/includes/home_search.php');
endwhile;
} else {
include(TEMPLATEPATH. '/includes/not-found/not-found-search.php');
}
wp_reset_postdata();
Подгрузка постов работает, и первые результаты выдает верно, но я так понял он не передает запрос из формы поиска и в итоге по кнопке загрузить еще, подгружает новости не по теме запроса. Никак не могу понять, где тут ошибка?
Все это добро отсюда https://misha.agency/wordpress/ajax-pagination.html
Часть решений отсюда https://wp-kama.ru/question/vydacha-postov-po-poiskovomu-zaprosu-s-uchyotom-ajax-podgruzki-postov
Но так и не получается правильно подгружать следующие новости учитывая какой запрос был в форме поиска.
Вот скрипт который заработал ) Блин невнимательность она такая
jQuery(function($){
$('#true_loadmore4').click(function(){
$(this).text('Показываю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
var data = {
'action': 'loadmore4',
'query': posts, // вот эту строчку забыл )
'page' : current_page
};
$.ajax({
url:ajaxurl, // обработчик
data:data, // данные
type:'POST', // тип запроса
success:function(data){
if( data ) {
$('#true_loadmore4').text('Показать ещё').before(data); // вставляем новые посты
current_page++; // увеличиваем номер страницы на единицу
if (current_page == max_pages) $("#true_loadmore4").remove(); // если последняя страница, удаляем кнопку
} else {
$('#true_loadmore4').remove(); // если мы дошли до последней страницы постов, скроем кнопку
}
}
});
});
});
В функцию-обработчик не передаётся содержимое поисковой строки.