Как создать динамическую пагинацию в WordPress с помощью AJAX

Динамическая пагинация — это отличный способ улучшить пользовательский опыт на сайте WordPress, позволяя загружать новые записи без перезагрузки страницы. Это особенно полезно для блогов, каталогов и магазинов, где много контента, и хочется сделать навигацию максимально плавной и современной.

Почему стоит использовать AJAX для пагинации в WordPress

Традиционная пагинация требует полной перезагрузки страницы, что замедляет работу сайта и может раздражать пользователей. AJAX позволяет подгружать новые данные в фоне и обновлять только нужный участок страницы. Это значительно ускоряет взаимодействие и снижает нагрузку на сервер.

Кроме того, динамическая пагинация помогает сохранить контекст и состояние страницы, что положительно сказывается на SEO и удобстве пользователей.

Основные шаги создания динамической пагинации с AJAX

Реализация состоит из нескольких этапов:

  1. Создание функции для вывода постов с поддержкой пагинации.
  2. Добавление обработчика AJAX в functions.php.
  3. Написание JavaScript для отправки запросов и обновления контента без перезагрузки.

Давайте рассмотрим каждый шаг подробнее.

1. Создание функции вывода постов с пагинацией

Для начала создадим функцию wptour_get_posts_ajax, которая будет брать номер страницы и возвращать HTML с постами.

function wptour_get_posts_ajax($paged = 1) {
    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'paged' => $paged
    ];
    $query = new WP_Query($args);
    if($query->have_posts()) {
        ob_start();
        echo '<div class="wptour-post-list">';
        while($query->have_posts()) {
            $query->the_post();
            echo '<article class="wptour-post">';
            echo '<h2>' . get_the_title() . '</h2>';
            echo '<div>' . get_the_excerpt() . '</div>';
            echo '</article>';
        }
        echo '</div>';
        wp_reset_postdata();
        return ob_get_clean();
    } else {
        return '<p>Посты не найдены.</p>';
    }
}

2. Добавление обработчиков AJAX в functions.php

Теперь нам нужно создать AJAX обработчики для авторизованных и неавторизованных пользователей. Они будут принимать параметр paged и возвращать сформированный HTML.

add_action('wp_ajax_wptour_load_posts', 'wptour_ajax_load_posts');
add_action('wp_ajax_nopriv_wptour_load_posts', 'wptour_ajax_load_posts');

function wptour_ajax_load_posts() {
    $paged = isset($_POST['paged']) ? intval($_POST['paged']) : 1;
    $response = wptour_get_posts_ajax($paged);
    echo $response;
    wp_die();
}

3. Подключение скрипта и написание JavaScript для AJAX запросов

Подключим скрипт в functions.php, локализуем параметры для AJAX:

function wptour_enqueue_scripts() {
    wp_enqueue_script('wptour-ajax-pagination', get_template_directory_uri() . '/js/wptour-ajax-pagination.js', ['jquery'], null, true);
    wp_localize_script('wptour-ajax-pagination', 'wptour_ajax_obj', [
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wptour_ajax_nonce')
    ]);
}
add_action('wp_enqueue_scripts', 'wptour_enqueue_scripts');

В файле wptour-ajax-pagination.js реализуем логику подгрузки новых постов:

jQuery(document).ready(function($) {
    var paged = 1;
    $('#wptour-load-more').on('click', function(e) {
        e.preventDefault();
        paged++;
        $.ajax({
            url: wptour_ajax_obj.ajaxurl,
            type: 'POST',
            data: {
                action: 'wptour_load_posts',
                paged: paged,
                _ajax_nonce: wptour_ajax_obj.nonce
            },
            success: function(response) {
                if(response.trim()) {
                    $('.wptour-post-list').append(response);
                } else {
                    $('#wptour-load-more').hide(); // Скрываем кнопку, если постов больше нет
                }
            }
        });
    });
});

Советы по улучшению и плагинам для динамической пагинации

Если хочется использовать готовые решения с более расширенным функционалом, можно обратить внимание на плагины:

  • Ajax Load More — мощный плагин для бесконечной прокрутки и AJAX пагинации.
  • ABC Pagination — простой в настройке и с поддержкой AJAX.

Для повышения производительности стоит кэшировать результаты AJAX запросов, например, с помощью Clearfy Pro, который умеет оптимизировать работу сайта и плагинов.

Отладка и распространённые ошибки при создании динамической пагинации

При реализации пагинации AJAX часто возникают следующие проблемы:

  • Неправильная передача номера страницы paged — важно корректно увеличивать переменную и передавать в запрос.
  • Отсутствие поддержки неавторизованных пользователей — обязательно нужно регистрировать обработчик с префиксом nopriv.
  • Проблемы с JavaScript — ошибки в консоли могут прерывать выполнение, стоит использовать отладчик и проверять правильность селекторов.
  • Дублирование контента — при добавлении новых записей нужно не перезаписывать, а дописывать в контейнер.

Также учитывайте, что при использовании SEO-плагинов или кэширования нужно правильно настроить исключения для AJAX-запросов.

Итог

Создание собственной динамической пагинации с AJAX в WordPress — задача вполне выполнимая и улучшает юзабилити сайта. Приведённый пример легко адаптировать под любые кастомные типы записей и дизайн. Если хочется сэкономить время, можно использовать качественные плагины, но собственный код даёт полный контроль и гибкость.

Как создать автоматический импорт постов в WordPress с помощью WP All Import
02.02.2026
WooCommerce: как добавить дополнительные поля в форму оплаты без плагинов
26.05.2026
Как создать автоматический отзыв с подтверждением в WordPress
17.04.2026
Как автоматизировать управление переадресациями в WordPress
10.04.2026
Как избежать конфликтов при использовании хуков в WooCommerce
10.05.2026

Уроки со скриншотами, подробные руководства