MaximusDem
@MaximusDem
Начинающий разработчик

Как сделать разбиение на страницы (пагинация) результата Ajax запроса (Wordpress)?

Приветствую всех, уважаемые хабровцы! Возникла такая задача, вроде и простая, но всю голову сломал. Суть в чем. У меня есть страница рубрики, в которой выводятся посты. На этой же странице есть форма поиска, в которой я через скрытое поле передаю переменную категории в ajax запрс
<form  role="search" method="get" class="" id="searchform" action="">
                  <input class="search-form__input input-search ajax_preloader" type="text"  value="<?php echo get_search_query() ?>" name="s" id="s" autocomplete="off"  placeholder="What are you looking for?"/><div id="ajax_preloader"><img src="/images/circle.gif" alt=""/></div>
				  <input type="hidden" name="category_id" class="category_id"  value="<?php echo $category->cat_ID; ?>"/>
                  <button type="button" id="searchsubmit" class="search-button"><img src="/svg/search-icon-block.svg" alt="" />
                  </button>
                </form>

Обработал в аяксе(я там с разных форм много чего передаю)
$('#searchform input').keydown(function(event){
      if(event.keyCode == 13){
        event.preventDefault();
          
		let search_value = $('.search-form__input').val();
        let cat_id = $('.category_id').val();
		let author_name = $('.author_name').val();	
		let tag_id = $('.tag_id').val();	
		let year_num = $('.year_num').val();
		let month_num = $('.month_num').val();
		let day_num = $('.day_num').val();		
        if (search_value.length > 2) { // кол-во символов
		$('#ajax_preloader').show();		
            $.ajax({
                url: '/wp-admin/admin-ajax.php',
                type: 'POST',
                data: {
                    'action': 'ajax_search', // functions.php 
                    'term': search_value,
					'cat_id': cat_id,
					'author_name': author_name,
					'tag_id': tag_id,
					'year_num': year_num,
					'month_num': month_num,
					'day_num': day_num,
                },
				
                success: function (results) {
                    search_results.fadeIn(200).html(results);
					$('#ajax_preloader').hide();
                }
            });
        } else {
            search_results.fadeOut(200);
			
        }

И передаю в обработчик
// ajax поиск по сайту 
add_action('wp_ajax_nopriv_ajax_search', 'ajax_search');
add_action('wp_ajax_ajax_search', 'ajax_search');
function ajax_search()
{
    $args = array(
        'post_type'      => 'post', 
        'post_status'    => 'publish',
        'order'          => 'DESC',
      //'posts_per_page' => -1, 
        'orderby'        => 'date',
        's'              => $_POST['term'],
			'cat' => $_POST['cat_id'],
			'author_name' => $_POST['author_name'],
			'tag_id' => $_POST['tag_id'],
			'date_query' => array(
		array(
			'year'  => $_POST['year_num'],
			'month' => $_POST['month_num'], 
			'day'   => $_POST['day_num'],
		),
	),
    );
add_filter( 'posts_search', 'search_by_title', 10, 2 );
    $query = new WP_Query($args);
remove_filter( 'posts_search', 'search_by_title', 500 );

	echo '<span class="search_text">You have';
	echo '<span class="search_count">'.$query->found_posts. '</span>';
	echo 'search results</span>';
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post(); 
             get_template_part('loop');
        }
    } else { ?>
        <div class="ajax-search__item">
            <div class="ajax-search__not-found">Nothing found</div>
        </div>
<?php }

    exit;

}


Все ок, цикл выводится, вроде пора радоваться, но...А как сделать разбиение на страницы именно результата вывода? Смотрел и пробовал разные варианты, стандартная пагинация в этом цикле не работает. ..Как правильно разбить цикл на отрезки, например, по десять постов, и показывать их, например по клику на 1,2,3 и т.д?
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы