@YanAlexandrov
Чайник со стажем

Как сделать пагинацию без перезагрузки?

Добрый день коллеги. Wordpress. Пытаюсь сделать перемещение по страницам навигации без перезагрузки.
Вот что уже есть:
В конце вывода записей создаю кнопку с id true_loadmore. На эту кнопку вешаю событие загрузки постов следующей страницы пагинации на Ajax.
var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
	var true_posts = '<?php echo serialize($wp_query->query_vars); ?>';
	var current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
	var max_pages = <?php echo $wp_query->max_num_pages; ?>;
	jQuery(function($){
		$('body').on('click', '#true_loadmore', function(){
			$(this).text('Загружаю...');
			var data = {
				'action': 'loadmore',
				'query': true_posts,
				'page' : current_page,
				'max_pages' : max_pages,
			};
			$.ajax({
				url:ajaxurl,
				data:data,
				type:'POST',
				success:function(data){
					if( data ) {
						$('#true_loadmore').text('Загрузить ещё');
						$('.more_block').before(data);
						current_page++;
						if (current_page == max_pages) $("#true_loadmore").remove();
					} else {
						$('#true_loadmore').remove();
					}
				}
			});
		});
	});


Вот функция обработки запроса:
function true_load_posts(){
	echo '<main class="codyshopList grid front-page codyshop-content codyshop-post-box" id="main_section">';
	$args = unserialize(stripslashes($_POST['query']));
	$max_pages = $_POST['max_pages'];
	$paged = $_POST['page'] + 1;
	$cat = $_POST['cat'];
	$num = get_option( 'posts_per_page' );
	$options = array(
		'post_type'      => 'post',
        'posts_per_page' => $num,
		'post_status'    => 'publish',
		'cat'            => $cat,
		'paged'          => $paged,
	);
	
	query_posts( $options ); ?>
	
	<?php while (have_posts()): the_post(); ?>
        <div data-id="<?php echo get_the_ID(); ?>" class="codyshop-item codyshop-items codyshop ">
			<div class="post-item">
				<div class="info-box">
					<span class="love">
					<a rel="nofollow noindex" class="love-button" href="<?php echo admin_url( 'admin-ajax.php?action=post_love_add_love&post_id=' . get_the_ID() ) . '" data-id="' . get_the_ID() ;?>"><div class="heart"></div></a><span id="love-count-<?php echo get_the_ID();?>"><?php echo get_post_meta( get_the_ID(), 'post_love', true );?></span></span>
                    <span class="flaticon-interface"><?php echo get_post_meta (get_the_ID(),'views',true); ?></span>
					<span class="flaticon-comment-white-oval-bubble"><?php comments_number('0', '1', '%'); ?></span>
                </div>
                <a href="<?php the_permalink(); ?>">
                <?php if( has_post_thumbnail() ) {
                    the_post_thumbnail('codyshop-blog-thumbnail');
                } else{ ?>
                    <img src="<?php echo esc_url(get_template_directory_uri().'/assets/images/default.gif'); ?>" alt="">
                <?php } ?>
                </a>
                <div class="inner">
                    <h2><a data-toggle="modal" href="<?php  the_permalink(); ?>" class="title"><?php the_title(); ?></a></h2>
                </div>
			</div>
        </div>
			
	<?php endwhile; wp_reset_postdata(); ?>
			
	<?php $index++; $count_posts = wp_count_posts(); $published_posts = $count_posts->publish; echo '<div class="footer-navi-box"><div class="navi">Всего записей на сайте: ' . $published_posts . '</div><div class="footer-navi">'; ?>

    <?php the_posts_pagination( array(
        'mid_size' => 2,
        'Previous' => __( 'Back', 'codyshop' ),
        'Next' => __( 'Onward', 'codyshop' ),
    ) ); ?>
	
	<?php echo '<div class="btn_more_blocks" id="true_loadmore">Загрузить еще</div>';?>
	
	<?php echo '</div></div>';?>
	
	<?php echo '<div class="page-brake"><span>Страница: '; echo (get_query_var('paged')) ? get_query_var('paged') : 1; echo ' из '; echo $max_pages; echo '</span></div>';?>
		
	<?php wp_reset_query(); echo '</main>'; ?>
		
	<?php 
	die();
}
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');


Все работает. Но есть одно НО!
При клике по кнопке "Загрузить еще" посты добавляются, обновляется и пагинация. То есть, навигация как бы переходит на следующую страницу. Проблема в том, что меняются ссылки пагинации.
Например:
Было site.ru/blog/page/2/
Становится: site.ru/wp-admin/admin-ajax.php/2/
Естественно, эта страница пуста.
И так далее
Есть ли предложения, как решить данную проблему? Заранее благодарю.
  • Вопрос задан
  • 1615 просмотров
Пригласить эксперта
Ответы на вопрос 1
@mrtall
PHP Developer
Эта функция использует $GLOBALS['wp_query']
Не тестируя когд, по моему вам необходимо просто убрать wp_reset_postdata();
Если не поможет, то найдите правильно решение, для того что бы эта переменная была с запросом с которым вы сейчас работаете, что-то вроде:
$posts = new WP_Query( $query_vars );
$GLOBALS['wp_query'] = $posts;
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы