Как добавить AJAX в WordPress без плагинов

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

Что такое AJAX и зачем он нужен в WordPress

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

В WordPress AJAX часто используется для:

  • Отправки форм без перезагрузки страницы;
  • Динамической загрузки постов, комментариев, товаров;
  • Обновления корзины или фильтров на WooCommerce;
  • Интерактивных элементов интерфейса (лайки, голосования, избранное).

Для реализации AJAX в WordPress есть встроенный механизм, использующий admin-ajax.php. Мы рассмотрим, как его правильно использовать.

Настройка AJAX в WordPress: подключение JS и локализация скрипта

Первым шагом добавим JavaScript файл и передадим в него параметры для AJAX-запроса. Это делается в functions.php вашей темы или в файле плагина.

Пример кода для подключения скрипта и локализации:

function wpkey_enqueue_ajax_script() {
    wp_enqueue_script('wpkey-ajax-script', get_template_directory_uri() . '/js/wpkey-ajax.js', array('jquery'), '1.0', true);

    wp_localize_script('wpkey-ajax-script', 'wpkey_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wpkey_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpkey_enqueue_ajax_script');

Этот код подключает скрипт wpkey-ajax.js из папки темы и передает в него объект wpkey_ajax_obj с URL для AJAX-запросов и nonce для безопасности.

Зачем нужна nonce-проверка

Nonce — это одноразовый ключ безопасности, который предотвращает CSRF-атаки. Всегда проверяйте nonce в обработчике AJAX-запроса.

Создаем JavaScript для отправки AJAX-запроса

Теперь напишем код на jQuery, который отправит данные на сервер и обработает ответ.

jQuery(document).ready(function($) {
    $('#wpkey-ajax-button').on('click', function(e) {
        e.preventDefault();

        var data = {
            action: 'wpkey_ajax_action',
            nonce: wpkey_ajax_obj.nonce,
            param1: 'value1'
        };

        $.post(wpkey_ajax_obj.ajax_url, data, function(response) {
            if(response.success) {
                $('#wpkey-ajax-result').html(response.data.message);
            } else {
                $('#wpkey-ajax-result').html('Ошибка: ' + response.data);
            }
        });
    });
});

Здесь мы вешаем обработчик на кнопку с ID wpkey-ajax-button, собираем данные, включая action и nonce, и отправляем POST-запрос на сервер. После получения ответа выводим результат в элемент wpkey-ajax-result.

Обработка AJAX-запроса на сервере в WordPress

Теперь создадим PHP-функцию, которая будет обрабатывать AJAX-запрос, проверять nonce и возвращать ответ.

function wpkey_handle_ajax() {
    check_ajax_referer('wpkey_ajax_nonce', 'nonce');

    // Получаем параметр
    $param1 = isset($_POST['param1']) ? sanitize_text_field($_POST['param1']) : '';

    if(empty($param1)) {
        wp_send_json_error('Параметр не передан');
    }

    // Выполняем нужные действия, например, запрос к базе или логика
    $message = 'Получено значение: ' . $param1;

    // Отправляем успешный ответ
    wp_send_json_success(array('message' => $message));
}
add_action('wp_ajax_wpkey_ajax_action', 'wpkey_handle_ajax');
add_action('wp_ajax_nopriv_wpkey_ajax_action', 'wpkey_handle_ajax');

Функция проверяет nonce, получает параметр, обрабатывает его, а затем возвращает JSON-ответ с помощью wp_send_json_success или wp_send_json_error. Хуки wp_ajax_* и wp_ajax_nopriv_* подключают функцию для авторизованных и неавторизованных пользователей соответственно.

Пример практического использования AJAX: динамическая фильтрация записей

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

HTML-разметка

Для начала создадим простую форму с выпадающим списком категорий и контейнер для вывода результатов.

<select id="wpkey-category-filter">
  <option value="">Выберите категорию</option>
  <option value="category-slug-1">Категория 1</option>
  <option value="category-slug-2">Категория 2</option>
</select>

<div id="wpkey-filter-results"></div>

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

jQuery(document).ready(function($) {
    $('#wpkey-category-filter').on('change', function() {
        var category = $(this).val();

        var data = {
            action: 'wpkey_filter_posts',
            nonce: wpkey_ajax_obj.nonce,
            category: category
        };

        $.post(wpkey_ajax_obj.ajax_url, data, function(response) {
            if(response.success) {
                $('#wpkey-filter-results').html(response.data.posts_html);
            } else {
                $('#wpkey-filter-results').html('Ошибка при загрузке постов');
            }
        });
    });
});

PHP: обработка фильтрации и вывод постов

function wpkey_filter_posts() {
    check_ajax_referer('wpkey_ajax_nonce', 'nonce');

    $category_slug = isset($_POST['category']) ? sanitize_text_field($_POST['category']) : '';

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 10,
    );

    if(!empty($category_slug)) {
        $args['category_name'] = $category_slug;
    }

    $query = new WP_Query($args);

    if(!$query->have_posts()) {
        wp_send_json_error('Посты не найдены');
    }

    ob_start();

    while($query->have_posts()) {
        $query->the_post();
        ?>
        <div class="wpkey-post-item">
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <p><?php the_excerpt(); ?></p>
        </div>
        <?php
    }

    wp_reset_postdata();

    $posts_html = ob_get_clean();

    wp_send_json_success(array('posts_html' => $posts_html));
}
add_action('wp_ajax_wpkey_filter_posts', 'wpkey_filter_posts');
add_action('wp_ajax_nopriv_wpkey_filter_posts', 'wpkey_filter_posts');

Этот код получает выбранную категорию, формирует WP_Query и возвращает HTML с постами. Пользователь видит результат без перезагрузки страницы.

Советы и рекомендации по работе с AJAX в WordPress

  • Используйте nonce для безопасности. Никогда не пропускайте проверку nonce в обработчиках.
  • Обрабатывайте ошибки на клиенте и сервере. Возвращайте осмысленные сообщения об ошибках.
  • Оптимизируйте запросы — не загружайте лишние данные, используйте пагинацию.
  • Кэшируйте результаты при возможности, чтобы снизить нагрузку на сервер.
  • Разделяйте логику — JS отвечает за интерфейс, PHP — за бизнес-логику.

Альтернативные плагины для добавления AJAX в WordPress

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

  • Contact Form 7 — поддерживает AJAX отправку форм из коробки.
  • WooCommerce — AJAX обновление корзины и фильтров.
  • WP AJAX Filters — плагин для AJAX фильтрации записей.

Но часто собственный код дает больше контроля и легкости.

Оптимизация базы данных WordPress: эффективные методы и примеры кода
21.11.2025
Как автоматизировать удаление старых комментариев в WordPress
09.04.2026
Как настроить автоматический редирект ссылок в WordPress
12.02.2026
Как запретить индексацию отдельных страниц WordPress
09.03.2026
WooCommerce: способы оплаты не отображаются при использовании Strict Checkout — решение проблемы
11.05.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс