Как ограничить количество постов в цикле wordpress совместно с кнопкой «загрузить еще»?

Всем привет. В шаблоне главной страницы выводятся посты, почему то по 14 штук, на странице блога так же те же посты, нужно чтобы на главной грузилось по 6 и подгружалось кнопкой так же по 6 постов, а на странице блога все то же самое, только по 9. Перепробовал разные способы, но единого решения не нашел, работает либо вывод по 6 постов, но кнопка "загрузить еще" не работает, либо кнопка подгружает по 6, но отображается на странице изначально 14. Код приложу ниже.

index.php
<div class="projects">
				<?php
                    query_posts( array(
                            'post_type' => 'post'
                    ) );
                    if( have_posts() ){
                        while( have_posts() ){
                            the_post();
                            $i = get_the_post_thumbnail_url();
                            ?>
                            <div class="project">
                                <a href="<?php echo get_permalink(); ?>"><div class="project-img" style="background: url('<?php echo $i;?>')"></div></a>
                                <p class="may-title"><?php the_title(); ?></p>
                                <p class="may-annotice"><?php the_excerpt(); ?></p>
                                <p class="post-date"><?php the_date('d/m/Y'); ?></p>
                            </div>
                            <?php
                        }
                    } else {                 
                    }
                    ?>
				</div>
				<!-- button for load more posts  -->
				<?php if (  $wp_query->max_num_pages > 1 ) : ?>
					<script>
						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; ?>';
					</script>
					<div id="true_loadmore" class="watch hover-blue">Загрузить ещё</div>
				<?php endif; ?>
				<!-- button for load more posts  -->			
			</div>


functions.php
/* new ajax load more */
function true_loadmore_scripts() {
    wp_enqueue_script( 'true_loadmore', get_stylesheet_directory_uri() . '/loadmore.js', array('jquery') );
}
 
add_action( 'wp_enqueue_scripts', 'true_loadmore_scripts' );


function true_load_posts(){
    $args = unserialize(stripslashes($_POST['query']));
    $args['paged'] = $_POST['page'] + 1; // следующая страница
    $args['post_status'] = 'publish';
    $q = new WP_Query($args);
    if( $q->have_posts() ):
        while($q->have_posts()): $q->the_post();
            ?>
            <div class="project">
            <a href="<?php echo get_permalink(); ?>"><div class="project-img" style="background: url('<?php echo get_the_post_thumbnail_url(); ?>')"></div></a>
                <p class="may-title"><?php the_title(); ?></p>
                <p class="may-annotice"><?php the_excerpt(); ?></p>
                <p class="post-date"><?php the_date('d/m/Y'); ?></p>
            </div>
            <?php
        endwhile;
    endif;
    wp_reset_postdata();
    die();
}
 
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');
/* new ajax load more */

/* number of posts in page */
function custom_posts_per_page($query){
    if(is_home()){ $query->set('posts_per_page',6); }
}
add_action('pre_get_posts','custom_posts_per_page');
/* number of posts in page */


loadmore.js
jQuery(function($){
	$('#true_loadmore').click(function(){
		$(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
		var data = {
			'action': 'loadmore',
			'query': true_posts,
			'page' : current_page
		};
		$.ajax({
			url:ajaxurl, // обработчик
			data:data, // данные
			type:'POST', // тип запроса
			success:function(data){
				if( data ) { 
					$('#true_loadmore').text('Загрузить ещё').before(data); // вставляем новые посты
					current_page++; // увеличиваем номер страницы на единицу
					if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
				} else {
					$('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
				}
			}
		});
	});
});


Вот таким способом выводятся 14 записей и есть кнопка для Ajax подгрузки постов по 6 штук, но если заменяю цикл на вот такой, то кнопка пропадает, но выводится как мне надо 6 постов.
<div class="projects">
				<?php
						global $post;
						$args = array('posts_per_page' => 6);
						$myposts = get_posts( $args );
						foreach( $myposts as $post ){ setup_postdata($post);?>
						<div class="project">
						<a href="<?php echo get_permalink(); ?>"><div class="project-img" style="background: url('<?php echo get_the_post_thumbnail_url(); ?>')"></div></a>
							<p class="may-title"><?php the_title(); ?></p>
							<p class="may-annotice"><?php the_excerpt(); ?></p>
							<p class="post-date"><?php the_date('d/m/Y'); ?></p>
						</div>
						<?php }
						wp_reset_postdata();
						?>
				</div>

				<!-- button for load more posts  -->
				<?php if (  $wp_query->max_num_pages > 1 ) : ?>
					<script>
						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; ?>';
					</script>
					<div id="true_loadmore" class="watch hover-blue">Загрузить ещё</div>
				<?php endif; ?>
				<!-- button for load more posts  -->				
			</div>
  • Вопрос задан
  • 573 просмотра
Пригласить эксперта
Ответы на вопрос 1
nefone
@nefone
Junior PHP разработчик
Читать мануал WP по функциям: have_posts() и query_posts()
и циклом while() выводить статьи не больше 9
Ответ написан
Ваш ответ на вопрос

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

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