Как создать свой виджет в WordPress: подробное руководство с примерами кода

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

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

Виджет — это небольшой блок с определённой функциональностью, который можно добавить в специальную область темы, поддерживающую виджеты (sidebar, footer и др.). В WordPress уже есть множество встроенных виджетов, но часто возникает необходимость добавить уникальный функционал, которого нет в стандартном наборе.

Создание собственного виджета позволяет:

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

Ниже мы пошагово рассмотрим, как зарегистрировать и реализовать виджет.

Регистрация виджета: базовый каркас класса

Для создания виджета нужно создать класс, расширяющий WP_Widget, и зарегистрировать его в WordPress. Вот базовый шаблон:

class WPBOX_Widget_Example extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpbox_widget_example', // ID виджета
            'WPBOX: Пример виджета', // Название виджета
            ['description' => 'Пример собственного виджета для WPBOX.ru']
        );
    }

    // Вывод содержимого виджета на фронтенде
    public function widget($args, $instance) {
        echo $args['before_widget'];
        if (!empty($instance['title'])) {
            echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
        }
        echo '<p>Привет от WPBOX: это пример собственного виджета!</p>';
        echo $args['after_widget'];
    }

    // Форма в админке для настройки виджета
    public function form($instance) {
        $title = !empty($instance['title']) ? $instance['title'] : '';
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">Заголовок:</label> 
            <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>">
        </p>
        <?php
    }

    // Сохранение настроек виджета
    public function update($new_instance, $old_instance) {
        $instance = [];
        $instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
        return $instance;
    }
}

// Регистрируем виджет
function wpbox_register_widget_example() {
    register_widget('WPBOX_Widget_Example');
}
add_action('widgets_init', 'wpbox_register_widget_example');

Этот код создаёт простой виджет с настраиваемым заголовком и статичным текстом внутри. Разместите его в файле плагина или в functions.php вашей темы.

Добавление расширенного функционала: динамический вывод и AJAX

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

Подготовка виджета с кнопкой

Расширим метод widget(), добавив кнопку и контейнер для вывода:

public function widget($args, $instance) {
    echo $args['before_widget'];
    if (!empty($instance['title'])) {
        echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
    }
    echo '<div id="wpbox-advice-container"></div>';
    echo '<button id="wpbox-get-advice">Получить совет</button>';
    echo $args['after_widget'];
}

Добавление скрипта AJAX

Зарегистрируем и подключим скрипт, который будет отправлять запрос к серверу:

function wpbox_enqueue_widget_scripts() {
    wp_enqueue_script('wpbox-widget-ajax', get_template_directory_uri() . '/js/wpbox-widget-ajax.js', ['jquery'], null, true);
    wp_localize_script('wpbox-widget-ajax', 'wpbox_ajax_obj', [
        'ajax_url' => admin_url('admin-ajax.php')
    ]);
}
add_action('wp_enqueue_scripts', 'wpbox_enqueue_widget_scripts');

Создайте файл wpbox-widget-ajax.js в папке темы js со следующим содержимым:

jQuery(document).ready(function($) {
    $('#wpbox-get-advice').on('click', function() {
        $.ajax({
            url: wpbox_ajax_obj.ajax_url,
            type: 'POST',
            data: { action: 'wpbox_get_advice' },
            success: function(response) {
                $('#wpbox-advice-container').html('<p>' + response.data + '</p>');
            }
        });
    });
});

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

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

function wpbox_ajax_get_advice() {
    $advices = [
        'Регулярно делайте бэкапы сайта.',
        'Оптимизируйте изображения для быстрого загрузки.',
        'Используйте дочерние темы для кастомизаций.',
        'Обновляйте плагины и ядро WordPress вовремя.',
        'Минимизируйте количество активных плагинов для производительности.'
    ];
    $advice = $advices[array_rand($advices)];
    wp_send_json_success($advice);
}
add_action('wp_ajax_wpbox_get_advice', 'wpbox_ajax_get_advice');
add_action('wp_ajax_nopriv_wpbox_get_advice', 'wpbox_ajax_get_advice');

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

Интеграция с популярными плагинами WPShop

Если вы используете плагины с wpshop.ru, например, Clearfy Pro для оптимизации или WPRemark для комментариев, можно расширять виджет, например, показывая последние отзывы или оптимизируя кеш.

Пример: чтобы вывести последние отзывы из WPRemark в виджете, достаточно внутри метода widget() получить посты типа wpremark_review и вывести их:

$reviews = get_posts(['post_type' => 'wpremark_review', 'numberposts' => 5]);
echo '<ul>';
foreach ($reviews as $review) {
    echo '<li>' . esc_html(get_the_title($review)) . '</li>';
}
echo '</ul>';

Резюме и рекомендации по созданию виджетов

Создание собственного виджета — это удобный способ добавить уникальные блоки на сайт. Используйте объектно-ориентированный подход, обязательно реализуйте методы widget(), form() и update(). Для динамических функций добавляйте AJAX и подключайте скрипты корректно.

Не забывайте о безопасности: используйте esc_html, wp_nonce_field при необходимости, фильтры и санитизацию. А для интеграции с плагинами смотрите их API и возможности.

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

Как удалить пустые метаданные из базы WordPress для оптимизации
11.12.2025
Как добавить автоподсказки в поиск WordPress
08.03.2026
Как автоматически изменять мета-описание для постов WordPress
17.02.2026
Как сделать автоматическое отключение неиспользуемых плагинов в WordPress
06.01.2026
Как добавить автоподсказки в поиск WordPress
31.03.2026