Догрузка постов на WordPress

Как реализовать кнопку догрузки постов на WordPress? Пробовал действовать по инструкции Миши Рудастых, но есть ряд проблем:

  1. Догружаются все посты, а мне нужно столько сколько установлено в Админ панели
  2. Вместе в Респонсом постов догружается символ "0"
  3. Если не закаментить 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');

Ответы (0 шт):