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

Зачем нужна динамическая навигация в WordPress

В современных веб-проектах пользователи ожидают мгновенного отклика и плавной работы сайта без перезагрузок страниц. Статичная навигация традиционно требует полной перезагрузки при переходе между разделами, что замедляет работу и ухудшает пользовательский опыт. Использование AJAX (Asynchronous JavaScript and XML) позволяет подгружать контент динамически без перезагрузки страницы, делая навигацию быстрой и плавной.

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

В этой статье мы подробно разберём, как создать простую, но эффективную динамическую навигацию, используя AJAX и REST API WordPress, а также покажем примеры кода и расскажем о полезных плагинах.

Основы реализации AJAX навигации в WordPress

Для начала рассмотрим, как работает AJAX в WordPress. В основе лежит отправка запросов к серверу без перезагрузки страницы, получение данных и их динамическое отображение.

Самый удобный способ для взаимодействия — использование REST API WordPress, который позволяет получать данные в формате JSON. Это значительно упрощает разработку AJAX функционала.

Схема работы:

  • Пользователь кликает по пункту меню или кнопке.
  • JavaScript отправляет AJAX-запрос к серверу (REST API).
  • Сервер возвращает JSON с нужными данными (например, записи нужной категории).
  • JavaScript обновляет содержимое страницы без перезагрузки.

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

В functions.php вашей темы подключите скрипт и передайте URL REST API:

function wpmy_enqueue_scripts() {
    wp_enqueue_script('wpmy-ajax-nav', get_template_directory_uri() . '/js/ajax-navigation.js', array('jquery'), null, true);
    wp_localize_script('wpmy-ajax-nav', 'wpmy_ajax_obj', array(
        'rest_url' => esc_url_raw(rest_url('wp/v2/')),
        'nonce'    => wp_create_nonce('wp_rest')
    ));
}
add_action('wp_enqueue_scripts', 'wpmy_enqueue_scripts');

В этом примере мы подключаем скрипт ajax-navigation.js и передаём ему URL REST API и nonce для безопасности.

Создание JavaScript для обработки кликов и запроса

В файле ajax-navigation.js реализуем логику отправки запросов и обновления контента:

jQuery(document).ready(function($) {
    $('.wpmy-nav-item').on('click', function(e) {
        e.preventDefault();
        var categoryId = $(this).data('cat');
        $.ajax({
            url: wpmy_ajax_obj.rest_url + 'posts?categories=' + categoryId,
            method: 'GET',
            beforeSend: function(xhr) {
                xhr.setRequestHeader('X-WP-Nonce', wpmy_ajax_obj.nonce);
            },
            success: function(data) {
                var html = '';
                if(data.length) {
                    data.forEach(function(post) {
                        html += '<h3><a href="' + post.link + '">' + post.title.rendered + '</a></h3>';
                        html += '<p>' + post.excerpt.rendered + '</p>';
                    });
                } else {
                    html = '<p>Записей не найдено.</p>';
                }
                $('#wpmy-post-list').html(html);
            },
            error: function() {
                $('#wpmy-post-list').html('<p>Ошибка загрузки данных.</p>');
            }
        });
    });
});

Этот скрипт слушает клики по элементам с классом wpmy-nav-item, получает ID категории из атрибута data-cat, отправляет AJAX-запрос к REST API и обновляет блок с ID wpmy-post-list новыми постами.

HTML-разметка для динамической навигации

В шаблоне темы добавьте меню категорий и блок для вывода постов:

<nav id="wpmy-navigation">
    <ul>
        <?php
        $categories = get_categories();
        foreach($categories as $category) {
            echo '<li><a href="#" class="wpmy-nav-item" data-cat="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</a></li>';
        }
        ?>
    </ul>
</nav>
<div id="wpmy-post-list">
    <p>Выберите категорию для загрузки постов.</p>
</div>

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

Использование плагинов для упрощения задач

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

  • Ajax Load More — мощный плагин для подгрузки постов по кнопке или бесконечному скроллу с поддержкой фильтров и кастомных запросов.
  • WP Ajax Pagination — простой инструмент для AJAX пагинации и фильтрации записей.
  • Clearfy Pro с набором оптимизаций для ускорения AJAX-запросов и настройки кэширования.

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

Оптимизация и безопасность AJAX навигации

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

  • Используйте nonce (как в нашем примере) для защиты REST API запросов от CSRF атак.
  • Кешируйте результаты запросов, если данные обновляются нечасто, чтобы снизить нагрузку.
  • Ограничивайте количество возвращаемых записей в запросе (например, per_page=10), чтобы не перегружать клиент.
  • Обрабатывайте ошибки и показывайте пользователю понятные сообщения.

Расширение функционала: фильтры и пагинация

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

Для пагинации добавьте в запрос параметр page и реализуйте кнопки «Следующая» и «Предыдущая» с обработкой в JavaScript. Это позволит подгружать посты по частям без перезагрузки.

Пример запроса с пагинацией:

url: wpmy_ajax_obj.rest_url + 'posts?categories=' + categoryId + '&page=' + pageNumber + '&per_page=10'

В JavaScript нужно хранить текущую страницу и обновлять её при кликах по кнопкам.

Итоговые рекомендации по созданию динамической навигации в WordPress

Динамическая навигация с использованием AJAX и REST API — мощный инструмент для улучшения UX. Реализуя её, следуйте таким советам:

  • Используйте стандартные возможности REST API, чтобы не создавать сложные кастомные обработчики.
  • Обеспечьте безопасность через nonce и проверки прав пользователя при необходимости.
  • Оптимизируйте запросы и добавляйте кэширование.
  • Добавляйте удобные элементы управления — фильтры, пагинацию.
  • Используйте готовые плагины, если нужно быстро и без ошибок получить результат.

Больше полезных инструментов и плагинов для WordPress вы найдёте на WPShop.ru — удобном магазине решений для вашего сайта.

Как установить файл для отладки (debug.log) в WordPress и использовать его для поиска ошибок
18.02.2026
Как удалить или изменить метаданные из изображений WordPress
31.01.2026
Как автоматически удалять неактивных пользователей WordPress с помощью кода
27.03.2026
WooCommerce: автоматическое обновление статуса заказа после отправки
22.05.2026
Руководство по использованию REST API WordPress для разработчиков
20.11.2025