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

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

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

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

Использование AJAX в виджетах позволяет:

  • Повысить интерактивность сайта;
  • Снизить нагрузку на сервер и скорость загрузки страниц;
  • Предоставить пользователям актуальную информацию без перезагрузки.

Далее мы покажем, как реализовать такой виджет с нуля.

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

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

Создайте новый файл плагина, например, cyrtolat-ajax-widget.php и добавьте следующий код:

<?php
/*
Plugin Name: Cyrtolat AJAX Widget
Description: Виджет с поддержкой AJAX для динамического контента
Version: 1.0
Author: Cyrtolat
*/

class Cyrtolat_Ajax_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'cyrtolat_ajax_widget',
            __('Cyrtolat AJAX Widget', 'cyrtolat'),
            ['description' => __('Виджет с AJAX обновлением контента', 'cyrtolat')] 
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo '<div id="cyrtolat-ajax-content">Привет! Нажмите кнопку, чтобы обновить содержимое.</div>';
        echo '<button id="cyrtolat-ajax-button">Обновить</button>';
        echo $args['after_widget'];
    }

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

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

function cyrtolat_register_ajax_widget() {
    register_widget('Cyrtolat_Ajax_Widget');
}
add_action('widgets_init', 'cyrtolat_register_ajax_widget');

// Подключаем скрипты
function cyrtolat_enqueue_ajax_scripts() {
    wp_enqueue_script('cyrtolat-ajax-script', plugin_dir_url(__FILE__) . 'ajax-widget.js', ['jquery'], null, true);
    wp_localize_script('cyrtolat-ajax-script', 'cyrtolat_ajax_obj', [
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('cyrtolat_ajax_nonce')
    ]);
}
add_action('wp_enqueue_scripts', 'cyrtolat_enqueue_ajax_scripts');

// AJAX обработчик
function cyrtolat_ajax_handler() {
    check_ajax_referer('cyrtolat_ajax_nonce', 'nonce');
    $time = current_time('H:i:s');
    wp_send_json_success("Текущее время сервера: $time");
}
add_action('wp_ajax_cyrtolat_update_content', 'cyrtolat_ajax_handler');
add_action('wp_ajax_nopriv_cyrtolat_update_content', 'cyrtolat_ajax_handler');
?>

Этот код создает базовый виджет с кнопкой и блоком для вывода динамического контента. Обработчик AJAX возвращает текущее время сервера.

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

Создайте файл ajax-widget.js в директории плагина и добавьте следующий код:

jQuery(document).ready(function($) {
    $('#cyrtolat-ajax-button').on('click', function() {
        var data = {
            action: 'cyrtolat_update_content',
            nonce: cyrtolat_ajax_obj.nonce
        };

        $.post(cyrtolat_ajax_obj.ajax_url, data, function(response) {
            if(response.success) {
                $('#cyrtolat-ajax-content').html(response.data);
            } else {
                $('#cyrtolat-ajax-content').html('Ошибка при загрузке данных.');
            }
        });
    });
});

Этот скрипт отправляет AJAX-запрос при нажатии кнопки и обновляет содержимое блока div с ID cyrtolat-ajax-content.

Объяснение кода и безопасность AJAX-запросов в WordPress

Обратите внимание на следующие моменты:

  • Использование функции wp_localize_script для передачи URL AJAX и nonce — это стандартный способ обеспечить безопасность и удобство взаимодействия JavaScript с сервером.
  • В обработчике cyrtolat_ajax_handler вызывается check_ajax_referer для проверки nonce, что предотвращает CSRF-атаки.
  • Функция wp_send_json_success отправляет корректный JSON-ответ с успехом.

Такой подход гарантирует, что ваши AJAX-операции безопасны и соответствуют стандартам WordPress.

Расширение виджета: вывод динамических данных из базы данных

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

В методе widget замените вывод на следующий:

public function widget($args, $instance) {
    echo $args['before_widget'];
    echo '<div id="cyrtolat-ajax-content">Загрузка...</div>';
    echo '<button id="cyrtolat-ajax-button">Обновить</button>';
    echo $args['after_widget'];
}

Изменим AJAX-обработчик для выборки постов:

function cyrtolat_ajax_handler() {
    check_ajax_referer('cyrtolat_ajax_nonce', 'nonce');

    $query = new WP_Query([
        'posts_per_page' => 5,
        'post_status' => 'publish'
    ]);

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

    $output = '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';

    wp_send_json_success($output);
}

Теперь при нажатии кнопки в виджете будет динамически подгружаться список последних публикаций.

Как зарегистрировать и использовать виджет на сайте

После активации плагина перейдите в раздел Внешний вид > Виджеты в админке WordPress. Там вы увидите виджет Cyrtolat AJAX Widget. Добавьте его в нужную область и проверьте работу на сайте.

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

Заключение: преимущества кастомных AJAX-виджетов

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

Главное — соблюдать стандарты WordPress и обеспечивать безопасность данных и операций.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическую удалённую оптимизацию базы данных WordPress
25.01.2026
Как сделать автоматическую транслитерацию URL в WordPress
04.11.2025
Как добавить динамические метаданные в WordPress для улучшения SEO
22.01.2026
Как использовать AJAX в WordPress без плагинов: практические решения
16.12.2025
Как в WooCommerce исключить из каталога товары без остатка на складе
18.04.2026
×

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

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

пишет статьи

готовит SEO

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

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