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

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

Что такое виджет WordPress и зачем использовать AJAX

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

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

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

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

Начнём с создания плагина, в котором будет располагаться наш виджет. В папке wp-content/plugins создайте папку wp-course-random-quote-widget, а в ней файл wp-course-random-quote-widget.php с таким содержанием:

<?php
/*
Plugin Name: WP-Course Random Quote Widget
Description: Виджет для вывода случайной цитаты с поддержкой AJAX
Version: 1.0
Author: WP-Course
*/

class WPCourse_Random_Quote_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpcourse_random_quote_widget',
            'WP-Course Random Quote',
            array( 'description' => 'Виджет с случайной цитатой и AJAX обновлением' )
        );
    }

    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        echo '<div id="wpcourse-quote-container">';
        echo '<p id="wpcourse-quote">' . esc_html( $this->wpcourse_get_random_quote() ) . '</p>';
        echo '<button id="wpcourse-refresh-quote">Обновить цитату</button>';
        echo '</div>';
        echo $args['after_widget'];
    }

    private function wpcourse_get_random_quote() {
        $quotes = array(
            'Не откладывай на завтра то, что можно сделать сегодня.',
            'Учиться всегда и везде — залог успеха.',
            'Код должен быть понятен не только машине, но и человеку.',
            'Лучший способ предсказать будущее — создать его.',
            'Делай просто — думай сложно.'
        );
        return $quotes[array_rand( $quotes )];
    }

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

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

function wpcourse_register_random_quote_widget() {
    register_widget( 'WPCourse_Random_Quote_Widget' );
}
add_action( 'widgets_init', 'wpcourse_register_random_quote_widget' );

Этот код создаёт простой виджет с кнопкой и случайной цитатой. Теперь он выводит цитату при загрузке страницы, но кнопка пока не работает.

Добавление AJAX для обновления цитаты без перезагрузки

Чтобы кнопка обновляла цитату динамически, нам нужно подключить JavaScript, который отправит AJAX-запрос и получит новую цитату.

Регистрация и подключение скрипта

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

function wpcourse_enqueue_scripts() {
    wp_enqueue_script( 'wpcourse-ajax-script', plugin_dir_url( __FILE__ ) . 'js/wpcourse-ajax.js', array('jquery'), '1.0', true );
    wp_localize_script( 'wpcourse-ajax-script', 'wpcourse_ajax_obj', array(
        'ajax_url' => admin_url( 'admin-ajax.php' ),
        'nonce' => wp_create_nonce( 'wpcourse_nonce' )
    ) );
}
add_action( 'wp_enqueue_scripts', 'wpcourse_enqueue_scripts' );

Создайте в папке плагина папку js и в ней файл wpcourse-ajax.js с таким содержанием:

jQuery(document).ready(function($) {
    $('#wpcourse-refresh-quote').on('click', function(e) {
        e.preventDefault();
        $.ajax({
            url: wpcourse_ajax_obj.ajax_url,
            type: 'POST',
            data: {
                action: 'wpcourse_get_quote',
                nonce: wpcourse_ajax_obj.nonce
            },
            success: function(response) {
                if(response.success) {
                    $('#wpcourse-quote').text(response.data);
                } else {
                    alert('Ошибка при получении цитаты');
                }
            }
        });
    });
});

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

Добавим обработчик AJAX-запроса в файл плагина:

function wpcourse_handle_ajax_get_quote() {
    check_ajax_referer( 'wpcourse_nonce', 'nonce' );

    $quotes = array(
        'Не откладывай на завтра то, что можно сделать сегодня.',
        'Учиться всегда и везде — залог успеха.',
        'Код должен быть понятен не только машине, но и человеку.',
        'Лучший способ предсказать будущее — создать его.',
        'Делай просто — думай сложно.'
    );

    $quote = $quotes[array_rand($quotes)];
    wp_send_json_success( $quote );
}
add_action( 'wp_ajax_wpcourse_get_quote', 'wpcourse_handle_ajax_get_quote' );
add_action( 'wp_ajax_nopriv_wpcourse_get_quote', 'wpcourse_handle_ajax_get_quote' );

Теперь при нажатии на кнопку будет выполняться AJAX-запрос, сервер вернёт случайную цитату, и она обновится на странице без перезагрузки.

Советы по безопасности и оптимизации виджета с AJAX

Обязательно используйте wp_create_nonce и check_ajax_referer для защиты от CSRF-атак. Это мы сделали в нашем примере.

Если данные, которые вы загружаете через AJAX, берутся из базы данных или внешних API, позаботьтесь о кэшировании, чтобы снизить нагрузку на сервер.

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

Заключение по созданию AJAX-виджета

Мы рассмотрели, как создать собственный виджет WordPress с динамическим обновлением контента через AJAX. Этот приём можно использовать для создания виджетов с новостями, курсами валют, прогнозом погоды и любыми другими динамическими данными.

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

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

⭐⭐⭐⭐⭐
Как настроить отзывы в WordPress с использованием плагинов и кода
01.01.2026
Как создать свой шорткод в WordPress: практическое руководство с примерами
10.11.2025
Оптимизация базы данных WordPress: как ускорить сайт и снизить нагрузку
17.11.2025
Как автоматизировать удаление спама в комментариях WordPress с помощью кода и плагинов
09.01.2026
Как создать уникальный виджет в WordPress с подключением AJAX
29.11.2025