Как добавить поддержку AJAX в дочерних темах WordPress

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

Почему AJAX важен для дочерних тем WordPress

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

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

Основные шаги для добавления AJAX в дочернюю тему

1. Регистрация и подключение JS-файла с AJAX-логикой.
2. Локализация скрипта для передачи URL и nonce.
3. Создание PHP-функции-обработчика AJAX-запроса.
4. Регистрация обработчика через WordPress хуки.

Подключение и локализация JavaScript в дочерней теме

Для начала создадим файл ajax-script.js в папке дочерней темы js. В этом файле будет код для отправки AJAX-запросов.

jQuery(document).ready(function($) {
    $('#my-button').on('click', function() {
        $.ajax({
            url: wp_theme_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wp_theme_child_handle_ajax',
                security: wp_theme_ajax_object.nonce,
                param: 'some_value'
            },
            success: function(response) {
                $('#response-container').html(response.data);
            },
            error: function(xhr, status, error) {
                console.log('AJAX error:', error);
            }
        });
    });
});

Далее регистрируем и локализуем этот скрипт в functions.php дочерней темы:

function wp_theme_child_enqueue_scripts() {
    wp_enqueue_script('wp-theme-child-ajax', get_stylesheet_directory_uri() . '/js/ajax-script.js', array('jquery'), null, true);
    wp_localize_script('wp-theme-child-ajax', 'wp_theme_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wp_theme_child_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wp_theme_child_enqueue_scripts');

Обратите внимание, что мы используем get_stylesheet_directory_uri(), чтобы получить путь именно к дочерней теме, а не к родительской.

Создание PHP-обработчика AJAX-запроса

В functions.php дочерней темы добавим функцию, которая будет обрабатывать AJAX-запросы:

function wp_theme_child_handle_ajax() {
    check_ajax_referer('wp_theme_child_nonce', 'security');

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

    // Логика обработки параметра
    $response = 'Вы передали значение: ' . esc_html($param);

    wp_send_json_success($response);
}
add_action('wp_ajax_wp_theme_child_handle_ajax', 'wp_theme_child_handle_ajax');
add_action('wp_ajax_nopriv_wp_theme_child_handle_ajax', 'wp_theme_child_handle_ajax');

Здесь мы проверяем nonce для безопасности, получаем параметр из запроса, обрабатываем его и отправляем ответ в формате JSON.

Практические советы и особенности

1. Используйте уникальные префиксы

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

2. Не изменяйте родительскую тему

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

3. Отладка AJAX

Для отладки используйте console.log в JS и проверяйте ответы сервера через инструменты разработчика браузера. Логирование ошибок PHP можно временно добавить через error_log().

Пример использования AJAX для загрузки дополнительных постов в дочерней теме

Рассмотрим пример, как реализовать кнопку «Загрузить ещё» с помощью AJAX, чтобы подгружать записи без перезагрузки.

В JS добавим:

let page = 1;
$('#load-more').on('click', function() {
    page++;
    $.ajax({
        url: wp_theme_ajax_object.ajax_url,
        type: 'POST',
        data: {
            action: 'wp_theme_child_load_more',
            nonce: wp_theme_ajax_object.nonce,
            page: page
        },
        success: function(response) {
            if(response.success && response.data) {
                $('#posts-container').append(response.data);
            } else {
                $('#load-more').hide();
            }
        }
    });
});

В PHP допишем обработчик:

function wp_theme_child_load_more() {
    check_ajax_referer('wp_theme_child_nonce', 'nonce');

    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;

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

    $query = new WP_Query($args);

    if($query->have_posts()) {
        ob_start();
        while($query->have_posts()) {
            $query->the_post();
            ?>
            <article class="post-item">
                <h2><?php the_title(); ?></h2>
                <div><?php the_excerpt(); ?></div>
            </article>
            <?php
        }
        wp_reset_postdata();
        $posts_html = ob_get_clean();
        wp_send_json_success($posts_html);
    } else {
        wp_send_json_error();
    }
}
add_action('wp_ajax_wp_theme_child_load_more', 'wp_theme_child_load_more');
add_action('wp_ajax_nopriv_wp_theme_child_load_more', 'wp_theme_child_load_more');

Таким образом, вы сможете добавить интерактивные элементы с AJAX в дочернюю тему, не затрагивая родительскую, и улучшить UX вашего сайта.

Полезные плагины для работы с AJAX в WordPress

Хотя описанный способ полностью ручной, есть плагины, которые облегчают работу с AJAX:

  • Ajax Load More — для подгрузки постов и контента.
  • WP Ajax Frontend Post — для создания форм отправки постов с фронтенда.
  • Clearfy Pro — оптимизация и улучшение работы AJAX-запросов в целом.
Как создать динамический журнал в WordPress с помощью REST API
23.11.2025
Как работать с AJAX в теме WordPress: практическое руководство
26.03.2026
Как создать динамический слайдер в WordPress теме
02.02.2026
Как создать тему WordPress с поддержкой отзывчивого дизайна
16.03.2026
Как создать динамические фильтры в теме WordPress для кастомных типов записей
13.12.2025