Доброго времени суток. При подгрузки записей в WordPress встала задача сделать на первой странице 9 записей и при каждом клике подгружать 8 записей. Нашел похожую тему
https://toster.ru/q/222186 , но там обычная пагинация без AJAX и в моем случае такое решение не работает. Как вариант рассматриваю просто скрывать лишний элемент, но при новом клике снова его отображать при этом скрывая крайний элемент в последнем выводе, хотя опнимаю, что такое решение не совсем грамотное.
<main class="row">
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' =>
'9',
'cat' =>
'1',
);
$wp_query = new WP_Query( $args );
?>
<?php $loop = 0; ?>
<?php while ( $wp_query->
have_posts() ) : $wp_query->the_post();?>
<article class="col-md-8 col-sm-6">
<div class="main-news">
<time>
<?php the_time( 'j F, Y'); ?></time>
<div class="image-news hidden-sm hidden-xs">
<a href="<?php the_permalink(); ?>
">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'first-thumb' ); } ?></a>
</div>
<div class="image-news hidden-md hidden-lg" style="background: none !important;">
<a href="<?php the_permalink(); ?>
">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'second-thumb' ); } ?></a>
</div>
<a href="<?php the_permalink(); ?>
" class="teaser-news" style="margin-top: -1px;">
<?php the_title(); ?></a>
</div>
</article>
<?php endwhile; ?>
<?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 class="text-center">
<button type="button" id="true_loadmore" class="btn btn-danger">+ загрузить еще</button>
</div>
<?php endif; ?></main>
В functions php добавлена функция:
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();
?>
<article class="col-md-3 col-sm-6 main-news text-left">
<time>
<?php the_time( 'j F, Y'); ?></time>
<div class="image-news">
<a href="<?php the_permalink(); ?>"> <?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'middle-thumb' ); } ?></a> </div>
<a href="<?php the_permalink(); ?>" class="teaser-news">
<?php the_title(); ?></a>
</article>
<?php
endwhile;
endif;
wp_reset_postdata();
die();
}
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');
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(); // если мы дошли до последней страницы постов, скроем кнопку
}
}
});
});
});