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

В чем суть автоподгрузки товаров в WooCommerce

Автоподгрузка (lazy load или infinite scroll) товаров при прокрутке страницы заменяет классическую пагинацию. Это улучшает пользовательский опыт и снижает нагрузку на сервер за счет постепенной загрузки данных. В WooCommerce из коробки такого функционала нет, но его можно добавить с помощью кода или плагинов.

Диагностика проблемы: почему стандартная пагинация не подходит

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

Проверьте текущую пагинацию так:

  • Откройте страницу архива товаров.
  • Посмотрите, сколько товаров загружается на страницу (обычно 12 по умолчанию).
  • Прокрутите страницу вниз — если при достижении низа нужно нажимать кнопку «Далее» или «Следующая», значит автозагрузки нет.

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

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

function wpstandart_enqueue_infinite_scroll_scripts() {
    if (is_shop() || is_product_category() || is_product_tag()) {
        wp_enqueue_script('wpstandart-infinite-scroll', get_stylesheet_directory_uri() . '/js/infinite-scroll.js', array('jquery'), '1.0', true);
        wp_localize_script('wpstandart-infinite-scroll', 'wpstandart_params', array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'query_vars' => json_encode($GLOBALS['wp_query']->query),
            'max_pages' => $GLOBALS['wp_query']->max_num_pages,
        ));
    }
}
add_action('wp_enqueue_scripts', 'wpstandart_enqueue_infinite_scroll_scripts');

2. Создаем AJAX обработчик на сервере

function wpstandart_load_more_products() {
    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $query_vars = json_decode(stripslashes($_POST['query_vars']), true);
    $query_vars['paged'] = $paged;
    $query_vars['post_status'] = 'publish';

    // Запрос товаров
    $products = new WP_Query($query_vars);

    if ($products->have_posts()) {
        while ($products->have_posts()) {
            $products->the_post();
            wc_get_template_part('content', 'product');
        }
    }
    wp_reset_postdata();
    wp_die();
}
add_action('wp_ajax_load_more_products', 'wpstandart_load_more_products');
add_action('wp_ajax_nopriv_load_more_products', 'wpstandart_load_more_products');

3. Скрипт автоподгрузки (файл infinite-scroll.js)

jQuery(function($) {
    var canLoad = true;
    var page = 2;
    var maxPages = parseInt(wpstandart_params.max_pages);

    $(window).scroll(function() {
        if (!canLoad) return;
        if ($(window).scrollTop() + $(window).height() > $(document).height() - 200) {
            if (page <= maxPages) {
                canLoad = false;
                $.ajax({
                    url: wpstandart_params.ajax_url,
                    type: 'POST',
                    data: {
                        action: 'load_more_products',
                        page: page,
                        query_vars: wpstandart_params.query_vars
                    },
                    success: function(response) {
                        $('.products').append(response);
                        canLoad = true;
                        page++;
                    },
                    error: function() {
                        canLoad = true;
                    }
                });
            }
        }
    });
});

Проверка результата после внедрения

Чтобы проверить, что автоподгрузка работает:

  • Откройте страницу архива товаров (магазина или категории).
  • Прокрутите страницу вниз до низа.
  • Должны автоматически подгружаться новые товары без перезагрузки.
  • Проверьте консоль браузера на предмет ошибок JavaScript (Ctrl+Shift+J в Chrome).
  • При достижении последней страницы загрузка должна прекратиться.

Частые ошибки и их исправление

  • Новые товары не подгружаются — проверьте правильность подключения JS-файла и локализации скрипта.
  • Ошибка 500 при AJAX-запросе — убедитесь, что в обработчике нет синтаксических ошибок, и запрос к WP_Query корректен.
  • Дублирование товаров — проверьте, что параметр paged увеличивается корректно и отправляется на сервер.
  • Пагинация WooCommerce конфликтует — отключите стандартные элементы пагинации через CSS или фильтры.

Практические советы по оптимизации и безопасности

  • Ограничьте максимальное число страниц для подгрузки, чтобы избежать чрезмерной нагрузки.
  • Кешируйте AJAX-ответы на сервере при большом трафике.
  • Используйте nonce для защиты AJAX-запросов, если функционал расширяется.
  • Для повышения производительности можно использовать плагины типа Clearfy для оптимизации WooCommerce и удаления лишних скриптов.
Как удалить PHP ошибки в WordPress: практические советы и примеры
05.11.2025
Как автоматизировать раскладку контента в WordPress
30.01.2026
Как добавить адаптивные изображения в WordPress без плагинов
23.06.2026
Как добавить динамические метаданные в WordPress для лучшего SEO
01.04.2026
Автообновление плагинов WordPress без риска: настройка и контроль
13.01.2026