Как добавить автоматическую подгрузку постов в GeneratePress для бесконечной прокрутки

В современных интернет-проектах очень популярна функция бесконечной прокрутки (infinite scroll), которая позволяет пользователям подгружать новые записи без перезагрузки страницы. В теме GeneratePress, ориентированной на производительность и гибкость, можно реализовать эту функцию двумя основными способами: с помощью плагинов и через кастомный код.

Почему бесконечная прокрутка полезна для сайта на GeneratePress

Бесконечная прокрутка улучшает удобство просмотра контента, удерживает пользователей дольше на сайте и увеличивает вовлеченность. Особенно это важно для блогов, новостных сайтов и портфолио. GeneratePress, благодаря чистому и минималистичному коду, прекрасно подходит для такой функциональности без ощутимого влияния на скорость загрузки.

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

Использование плагина для бесконечной прокрутки на GeneratePress

Самый простой путь — это подключить плагин, который автоматически добавит infinite scroll на главную страницу и архивы.

Рекомендуемые плагины:

  • Ajax Load More — мощный и гибкий плагин с поддержкой кастомных запросов.
  • Yet Another Infinite Scroll — простой в настройке и легкий.

После установки и активации плагина нужно зайти в его настройки и указать селектор контейнера с постами, например .generatepress .posts-container или .inside-article в зависимости от структуры темы.

Пример настройки для Ajax Load More:

[ajax_load_more container_type="div" post_type="post" posts_per_page="5" scroll="true"]

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

Реализация бесконечной прокрутки в GeneratePress через кастомный код

Подключение скрипта подгрузки и AJAX-обработчика

Если не хочется использовать готовые плагины, можно написать собственный код. Ниже пример, как добавить бесконечную прокрутку, используя AJAX и wp_localize_script.

Сначала добавим в functions.php темы GeneratePress функцию для подключения скрипта и AJAX-хендлер:

function generatepress_load_more_scripts() {
    wp_enqueue_script('generatepress-loadmore', get_stylesheet_directory_uri() . '/js/loadmore.js', array('jquery'), '1.0', true );
    wp_localize_script('generatepress-loadmore', 'generatepress_loadmore_params', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'posts' => json_encode( get_posts( array('post_type' => 'post', 'posts_per_page' => 5) ) ),
        'current_page' => 1,
        'max_page' => max(1, wp_count_posts()->publish / 5),
    ));
}
add_action('wp_enqueue_scripts', 'generatepress_load_more_scripts');

function generatepress_loadmore_ajax_handler() {
    $paged = intval($_POST['page']) + 1;
    $query = new WP_Query(array(
        'post_type' => 'post',
        'paged' => $paged,
        'posts_per_page' => 5
    ));
    if($query->have_posts()) :
        while($query->have_posts()): $query->the_post();
            get_template_part('content', get_post_format());
        endwhile;
    endif;
    wp_die();
}
add_action('wp_ajax_generatepress_loadmore', 'generatepress_loadmore_ajax_handler');
add_action('wp_ajax_nopriv_generatepress_loadmore', 'generatepress_loadmore_ajax_handler');

В этом коде loadmore.js — наш клиентский JS, который будет отправлять AJAX-запросы.

Пример содержимого файла loadmore.js

jQuery(function($){
    var canBeLoaded = true,
        bottomOffset = 2000; // расстояние от низа страницы

    $(window).scroll(function(){
        var data = {
            'action': 'generatepress_loadmore',
            'page': generatepress_loadmore_params.current_page
        };

        if( $(document).scrollTop() > ( $(document).height() - bottomOffset ) && canBeLoaded ) {
            canBeLoaded = false;
            $.post(generatepress_loadmore_params.ajaxurl, data, function(response) {
                if(response) {
                    $('.generatepress .posts-container').append(response);
                    generatepress_loadmore_params.current_page++;
                    canBeLoaded = true;
                }
            });
        }
    });
});

Как адаптировать бесконечную прокрутку под GeneratePress

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

Для этого в коде скрипта и AJAX-обработчика используйте селектор .generatepress .posts-container или класс, который выводит ваши посты. При необходимости в дочерней теме можно переопределить шаблоны вывода постов через get_template_part для оптимальной интеграции.

Обработка ошибок и улучшение UX

Чтобы избежать ошибок при достижении последней страницы, добавьте проверку на максимальное количество страниц и выводите сообщение «Больше записей нет».

Также можно добавить индикатор загрузки с помощью CSS-анимации и показывать его во время AJAX-запроса.

Заключение

Добавление бесконечной прокрутки в GeneratePress — задача вполне выполнимая как с помощью готовых плагинов, так и с кастомным кодом. Если вы хотите простое и быстрое решение, используйте Ajax Load More или Yet Another Infinite Scroll.

Для максимальной гибкости и контроля стоит написать собственный AJAX-обработчик и JS-скрипт, как показано в примере. Это позволит тонко настроить подгрузку под особенности вашего сайта и темы GeneratePress.

Если хотите расширить функциональность, добавьте интеграцию с плагином WPGPT для генерации контента или оптимизации SEO.

Как добавить поддержку WebP в GeneratePress для ускорения загрузки сайта
09.01.2026
Добавление структуры данных JSON-LD в GeneratePress для улучшения SEO
13.01.2026
WooCommerce: как автоматически очищать корзину после успешной оплаты в GeneratePress
21.05.2026
Как создать динамические формы обратной связи в GeneratePress на WordPress
11.03.2026
Как настроить локальные шаблоны для Gutenberg в GeneratePress
07.02.2026