Догрузка постов на WordPress
Как реализовать кнопку догрузки постов на WordPress? Пробовал действовать по инструкции Миши Рудастых, но есть ряд проблем:
- Догружаются все посты, а мне нужно столько сколько установлено в Админ панели
- Вместе в Респонсом постов догружается символ "0"
- Если не закаментить die() этот скрипт вообще не работает
что в моем коде не правильно?
Страница блога
<div class="posts">
<?php
$current_page = (get_query_var('paged')) ? get_query_var('paged') : 1; // определяем текущую страницу блога
$args = array(
'posts_per_page' => get_option('posts_per_page'), // значение по умолчанию берётся из настроек, но вы можете использовать и собственное
'paged' => $current_page // текущая страница
);
query_posts( $args );
$wp_query->is_archive = true;
$wp_query->is_home = false;
while(have_posts()): the_post();
?>
<!-- Post -->
<a class="item" href="<?php the_permalink(); ?>">
<h3 class="text-uppercase"><?php the_title(); ?></h3>
<?php the_excerpt(); ?>
<p>Posted by <?php the_author(); ?> on <time datetime="<?php the_date('Y-m-d'); ?> <?php the_time( $d ); ?>" title="Date of publication"><?php echo get_the_date('j F, Y'); ?></time></p>
</a>
<!-- / Post -->
<?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>
<button id="true_loadmore" class="btn btn-normal btn-orange btn-material"><span class="btn-material-effect js-ripple"><i class="btn-material__circle"></i></span><span class="btn-name">Older Posts</span></button>
<?php endif; ?>
<?php wp_reset_query(); ?>
</div>
loadmore.js
jQuery(function($){
$('#true_loadmore').click(function(){
$(this).find('.btn-name').html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span><span>Loading...</span>'); // изменяем текст кнопки, вы также можете добавить прелоадер
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(); // если мы дошли до последней страницы постов, скроем кнопку
}
}
});
});
});
functions.php
function true_loadmore_scripts() {
// wp_enqueue_script('jquery'); // скорее всего он уже будет подключен, это на всякий случай
wp_enqueue_script( 'true_loadmore', get_stylesheet_directory_uri() . '/loadmore.js', array('jquery'), time() );
}
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';
// обычно лучше использовать WP_Query, но не здесь
query_posts( $args );
// если посты есть
if( have_posts() ) :
// запускаем цикл
while( have_posts() ): the_post(); ?>
<!-- Post -->
<a class="item" href="<?php the_permalink(); ?>">
<h3 class="text-uppercase"><?php the_title(); ?></h3>
<?php the_excerpt(); ?>
<p>Posted by <?php the_author(); ?> on <time datetime="<?php the_date('Y-m-d'); ?> <?php the_time( $d ); ?>" title="Date of publication"><?php echo get_the_date('j F, Y'); ?></time></p>
</a>
<!-- / Post -->
<?php
endwhile;
endif;
// die();
}
add_action('wp_ajax_loadmore', 'true_load_posts');
add_action('wp_ajax_nopriv_loadmore', 'true_load_posts');