Как автоматически обновлять виджеты WordPress без перезагрузки страницы

|

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

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

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

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

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

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

Шаг 1. Регистрация виджета

В файле плагина или темы добавьте следующий код:

class WPZoom_Ajax_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpzoom_ajax_widget',
            'WPZoom AJAX Виджет',
            ['description' => 'Виджет с автоматическим обновлением времени']
        );
    }

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

    public function form($instance) {
        // Можно добавить настройки виджета при необходимости
    }

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

function wpzoom_register_ajax_widget() {
    register_widget('WPZoom_Ajax_Widget');
}
add_action('widgets_init', 'wpzoom_register_ajax_widget');

Шаг 2. Создание REST API эндпоинта для получения времени

Добавим REST API маршрут, который будет возвращать текущее время сервера в формате JSON.

function wpzoom_register_time_endpoint() {
    register_rest_route('wpzoom/v1', '/time', [
        'methods' => 'GET',
        'callback' => 'wpzoom_get_server_time',
    ]);
}
add_action('rest_api_init', 'wpzoom_register_time_endpoint');

function wpzoom_get_server_time() {
    return ['time' => current_time('H:i:s')];
}

Шаг 3. Добавление скрипта для автоматического обновления виджета

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

function wpzoom_enqueue_widget_scripts() {
    wp_enqueue_script('wpzoom-ajax-widget', get_template_directory_uri() . '/js/wpzoom-ajax-widget.js', ['jquery'], null, true);
    wp_localize_script('wpzoom-ajax-widget', 'wpzoomAjax', [
        'restUrl' => esc_url_raw(rest_url('wpzoom/v1/time')),
    ]);
}
add_action('wp_enqueue_scripts', 'wpzoom_enqueue_widget_scripts');

Создайте файл wpzoom-ajax-widget.js в папке js вашей темы с таким содержанием:

jQuery(document).ready(function($) {
    function updateTime() {
        $.get(wpzoomAjax.restUrl, function(data) {
            $('#wpzoom-ajax-time').text('Текущее время: ' + data.time);
        });
    }
    updateTime(); // сразу обновить при загрузке
    setInterval(updateTime, 10000); // обновлять каждые 10 секунд
});

Альтернативные решения: плагины для динамических виджетов

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

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

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

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

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

// PHP: добавление nonce
function wpzoom_enqueue_widget_scripts() {
    wp_enqueue_script('wpzoom-ajax-widget', get_template_directory_uri() . '/js/wpzoom-ajax-widget.js', ['jquery'], null, true);
    wp_localize_script('wpzoom-ajax-widget', 'wpzoomAjax', [
        'restUrl' => esc_url_raw(rest_url('wpzoom/v1/time')),
        'nonce' => wp_create_nonce('wp_rest'),
    ]);
}

// В REST API колбэке
function wpzoom_get_server_time(WP_REST_Request $request) {
    $nonce = $request->get_header('X-WP-Nonce');
    if (!wp_verify_nonce($nonce, 'wp_rest')) {
        return new WP_Error('rest_forbidden', esc_html__('Неверный nonce'), ['status' => 403]);
    }
    return ['time' => current_time('H:i:s')];
}
// JS: передача nonce
jQuery(document).ready(function($) {
    function updateTime() {
        $.ajax({
            url: wpzoomAjax.restUrl,
            method: 'GET',
            beforeSend: function(xhr) {
                xhr.setRequestHeader('X-WP-Nonce', wpzoomAjax.nonce);
            },
            success: function(data) {
                $('#wpzoom-ajax-time').text('Текущее время: ' + data.time);
            }
        });
    }
    updateTime();
    setInterval(updateTime, 10000);
});

Выводы и рекомендации

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

Как сделать автоматический rollback обновлений WordPress при ошибках
16.01.2026
Как избежать конфликтов между плагинами WordPress: практические решения и примеры кода
24.01.2026
Как использовать REST API в WordPress для создания простого плагина
15.11.2025
WooCommerce: автоматическое отключение неактивных методов оплаты
12.05.2026
Как запустить PHP функции через шорткод с обработкой параметров в WordPress
17.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше