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(); // если мы дошли до последней страницы постов, скроем кнопку } } }); }); });
В функцию-обработчик не передаётся содержимое поисковой строки.