Автоподгрузка контента в WordPress без перезагрузки страницы

Автоподгрузка контента (ленивая загрузка или infinite scroll) — популярный приём для улучшения UX и снижения нагрузки на сервер. Вместо полной перезагрузки страницы при переходе на следующую страницу с записями, новые данные подгружаются динамически с помощью AJAX. В WordPress это реализовать можно несколькими способами, и в этой статье я расскажу, как сделать автоподгрузку постов с примерами кода и рекомендациями по плагинам.

Зачем нужна автоподгрузка контента в WordPress

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

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

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

Для примера создадим функцию wppuzzle_load_more_posts, которая будет обрабатывать AJAX-запросы и возвращать следующий набор постов.

1. Подключение скрипта и передача параметров

В файле functions.php темы подключаем JS с помощью wp_enqueue_script и передаём данные через wp_localize_script.

function wppuzzle_enqueue_scripts() {
    wp_enqueue_script('wppuzzle-loadmore', get_template_directory_uri() . '/js/loadmore.js', array('jquery'), null, true);
    wp_localize_script('wppuzzle-loadmore', 'wppuzzle_loadmore_params', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wppuzzle_loadmore_nonce'),
        'posts_per_page' => get_option('posts_per_page'),
        'current_page' => 1
    ));
}
add_action('wp_enqueue_scripts', 'wppuzzle_enqueue_scripts');

Здесь мы передаём URL для AJAX, nonce для безопасности, количество постов на страницу и текущую страницу.

2. Обработка AJAX-запроса в PHP

Добавляем обработчик для AJAX-запроса, который будет возвращать HTML с постами.

function wppuzzle_load_more_posts() {
    check_ajax_referer('wppuzzle_loadmore_nonce', 'nonce');

    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $args = array(
        'post_status' => 'publish',
        'posts_per_page' => get_option('posts_per_page'),
        'paged' => $paged
    );

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        ob_start();
        while ($query->have_posts()) {
            $query->the_post();
            get_template_part('template-parts/content', get_post_format());
        }
        wp_send_json_success(ob_get_clean());
    } else {
        wp_send_json_error('no_more_posts');
    }
    wp_die();
}
add_action('wp_ajax_wppuzzle_load_more', 'wppuzzle_load_more_posts');
add_action('wp_ajax_nopriv_wppuzzle_load_more', 'wppuzzle_load_more_posts');

Этот код проверяет nonce, получает номер страницы из POST, формирует запрос к постам, выводит их HTML и возвращает через JSON.

3. JS для отправки AJAX-запроса и вставки постов

Создаём файл loadmore.js в папке темы /js/ со следующим содержимым:

jQuery(document).ready(function($) {
    var canLoad = true;
    var page = wppuzzle_loadmore_params.current_page + 1;

    $(window).scroll(function() {
        if (!canLoad) return;
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 300) {
            canLoad = false;
            $.ajax({
                url: wppuzzle_loadmore_params.ajaxurl,
                type: 'POST',
                data: {
                    action: 'wppuzzle_load_more',
                    nonce: wppuzzle_loadmore_params.nonce,
                    page: page
                },
                success: function(response) {
                    if (response.success) {
                        $('#posts-container').append(response.data);
                        page++;
                        canLoad = true;
                    } else if (response.data === 'no_more_posts') {
                        $(window).off('scroll');
                    }
                },
                error: function() {
                    canLoad = true;
                }
            });
        }
    });
});

Этот скрипт следит за прокруткой страницы и, когда пользователь приблизится к концу, отправляет AJAX-запрос для подгрузки следующей страницы постов. Если новых постов нет — отключает автозагрузку.

Плагины для автоподгрузки контента в WordPress

Если не хочется писать код, можно использовать готовые решения. Вот несколько плагинов с поддержкой автоподгрузки:

  • Ajax Load More — мощный плагин для загрузки постов, комментариев и кастомных типов через AJAX. Поддерживает шаблоны, фильтры, пагинацию.
  • WP Infinite Scroll Post Loader — простой плагин для бесконечной прокрутки с настройками параметров подгрузки.
  • Yelly — тема с встроенной функцией автоподгрузки и оптимизацией под мобильные устройства (подходит, если используете тему с wpshop.ru)

Все эти плагины можно найти и установить с официального репозитория WordPress. Для интеграции с вашим сайтом советую обратить внимание на Ajax Load More с подробной документацией и примерами.

Особенности и советы по реализации автоподгрузки

При внедрении автоподгрузки важно учитывать несколько моментов:

  • SEO и индексация: поисковые роботы должны иметь возможность индексировать весь контент. Поэтому желательно иметь обычную пагинацию, а автоподгрузку сделать дополнительной опцией.
  • Оптимизация запросов: не запрашивайте слишком много постов за раз — это может замедлить работу сайта и увеличить нагрузку.
  • Кэширование: используйте плагины кэширования и убедитесь, что AJAX-запросы корректно обрабатываются кэшем или отключаются для них.
  • UX и уведомления: добавьте индикатор загрузки и сообщение, когда посты закончились, чтобы пользователь понимал, что контент полностью загружен.

Пример улучшения автоподгрузки: вывод сообщений и индикатора загрузки

Добавим в HTML контейнер для сообщений и индикатор загрузки:

<div id="posts-container">
  <!-- Здесь посты -->
</div>
<div id="loadmore-message" style="text-align:center; padding:10px; display:none;">Загрузка...</div>

И изменим JS, чтобы показывать индикатор и сообщение об окончании:

jQuery(document).ready(function($) {
    var canLoad = true;
    var page = wppuzzle_loadmore_params.current_page + 1;

    function showLoading(show) {
        if(show) $('#loadmore-message').text('Загрузка...').show();
        else $('#loadmore-message').hide();
    }

    $(window).scroll(function() {
        if (!canLoad) return;
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 300) {
            canLoad = false;
            showLoading(true);
            $.ajax({
                url: wppuzzle_loadmore_params.ajaxurl,
                type: 'POST',
                data: {
                    action: 'wppuzzle_load_more',
                    nonce: wppuzzle_loadmore_params.nonce,
                    page: page
                },
                success: function(response) {
                    showLoading(false);
                    if (response.success) {
                        $('#posts-container').append(response.data);
                        page++;
                        canLoad = true;
                    } else if (response.data === 'no_more_posts') {
                        $('#loadmore-message').text('Больше записей нет.');
                        $(window).off('scroll');
                    }
                },
                error: function() {
                    showLoading(false);
                    canLoad = true;
                }
            });
        }
    });
});

Так пользователю будет понятен процесс загрузки и окончание списка.

Выводы по автоподгрузке постов в WordPress

Автоподгрузка контента — отличное решение для улучшения UX и оптимизации работы сайта. Реализовать её можно самостоятельно с помощью AJAX-запросов и JS, а можно использовать готовые плагины. Главное — не забывать про SEO, оптимизацию и удобство пользователя.

Для ускоренного старта рекомендую обратить внимание на плагин Ajax Load More с поддержкой кастомизации и шаблонов.

Как удалить или изменить тексты ошибок в формах WordPress
09.02.2026
Как избежать конфликтов между плагинами WordPress: практические решения
21.01.2026
Как изменить вывод сообщений об ошибках в WordPress
29.01.2026
Как удалить или отключить REST API WordPress без потери функциональности
25.01.2026
Как использовать REST API для создания собственных эндпоинтов в WordPress
11.01.2026