Как создать динамичный виджет в WordPress с применением AJAX

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

Почему стоит использовать AJAX в виджетах WordPress

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

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

К тому же, WordPress предоставляет удобные хуки и функции для реализации AJAX-запросов, что упрощает разработку.

Создание базового виджета в WordPress

Начнём с создания простого виджета. Для этого создадим класс Wpdemo_Dynamic_Widget, наследующийся от WP_Widget. Это позволит подключить виджет к админке и вывести в сайдбар.

class Wpdemo_Dynamic_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpdemo_dynamic_widget',
            'Динамичный виджет Wpdemo',
            [ 'description' => 'Виджет с динамическим контентом через AJAX' ]
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo '<div id="wpdemo-widget-content">Загрузка...</div>';
        echo $args['after_widget'];
    }

    public function form($instance) {
        echo '<p>Настроек пока нет</p>';
    }

    public function update($new_instance, $old_instance) {
        return $old_instance;
    }
}

Зарегистрируем виджет в функции хука widgets_init:

function wpdemo_register_dynamic_widget() {
    register_widget('Wpdemo_Dynamic_Widget');
}
add_action('widgets_init', 'wpdemo_register_dynamic_widget');

Подключение скриптов и локализация AJAX URL

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

function wpdemo_enqueue_scripts() {
    wp_enqueue_script('wpdemo-widget-ajax', get_template_directory_uri() . '/js/wpdemo-widget-ajax.js', ['jquery'], null, true);
    wp_localize_script('wpdemo-widget-ajax', 'wpdemoAjax', [
        'ajaxurl' => admin_url('admin-ajax.php')
    ]);
}
add_action('wp_enqueue_scripts', 'wpdemo_enqueue_scripts');

Создадим файл wpdemo-widget-ajax.js с таким содержимым:

jQuery(document).ready(function($) {
    function wpdemoLoadWidgetContent() {
        $.ajax({
            url: wpdemoAjax.ajaxurl,
            method: 'POST',
            data: {
                action: 'wpdemo_load_widget_data'
            },
            success: function(response) {
                $('#wpdemo-widget-content').html(response.data);
            },
            error: function() {
                $('#wpdemo-widget-content').html('Ошибка загрузки данных');
            }
        });
    }

    wpdemoLoadWidgetContent();
});

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

Теперь создадим функцию, которая будет обрабатывать запросы и возвращать динамические данные. Для примера выведем текущее время сервера и список последних 5 постов.

function wpdemo_handle_ajax_load_widget_data() {
    $time = current_time('H:i:s');
    $posts = get_posts(['numberposts' => 5, 'post_status' => 'publish']);

    ob_start();
    echo '<p>Текущее время сервера: ' . esc_html($time) . '</p>';
    echo '<ul>';
    foreach ($posts as $post) {
        echo '<li>' . esc_html(get_the_title($post)) . '</li>';
    }
    echo '</ul>';

    wp_send_json_success(ob_get_clean());
}
add_action('wp_ajax_wpdemo_load_widget_data', 'wpdemo_handle_ajax_load_widget_data');
add_action('wp_ajax_nopriv_wpdemo_load_widget_data', 'wpdemo_handle_ajax_load_widget_data');

Дополнительные улучшения и примеры плагинов

Вы можете расширить виджет, добавив параметры в админке, например, количество постов для вывода или фильтрацию по категориям. Для этого добавьте соответствующие поля в метод form и сохраните их в update.

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

Для организации многошагового взаимодействия с пользователем и вывода интерактивного контента подойдет плагин WPStories, который позволяет создавать динамические истории и элементы с AJAX обновлением.

Заключение

Создание динамичных виджетов с AJAX в WordPress — отличная возможность повысить интерактивность сайта и улучшить пользовательский опыт. Используя приведённый пример и расширяя функционал, вы сможете делать собственные решения под любые задачи.

Как использовать хуки WordPress для автоматизации задач
21.12.2025
Как использовать AJAX для фильтрации постов в WordPress
09.03.2026
WooCommerce: автоматическое сброс статуса заказа при ошибках платежа
09.05.2026
Как сделать удалённый вывод данных в WordPress с помощью WP REST API
24.01.2026
Как удалить или изменить URL типа записи в WordPress без пересоздания
09.01.2026