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

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

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

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

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

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

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

Создаем базовый виджет: пошаговое руководство

Для создания виджета нужно написать класс, который наследуется от WP_Widget. В нем реализуются основные методы: __construct(), widget(), form() и update(). Рассмотрим на примере виджета, который выводит произвольный текст, задаваемый в настройках.

Шаг 1. Создаем класс виджета

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

class WPExamples_Widget_Text extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpexamples_widget_text',
            __('WPExamples Текстовый виджет', 'wpexamples'),
            array('description' => __('Простой текстовый виджет с настройками', 'wpexamples'))
        );
    }

    // Вывод виджета на сайте
    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'];
        }
        if (!empty($instance['text'])) {
            echo '<p>' . esc_html($instance['text']) . '</p>';
        }
        echo $args['after_widget'];
    }

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

    // Обработка сохранения настроек
    public function update($new_instance, $old_instance) {
        $instance = array();
        $instance['title'] = sanitize_text_field($new_instance['title']);
        $instance['text'] = sanitize_textarea_field($new_instance['text']);
        return $instance;
    }
}

Шаг 2. Регистрируем виджет

Чтобы WordPress распознал ваш класс как виджет, нужно зарегистрировать его с помощью хука widgets_init. Добавьте в тот же файл такой код:

function wpexamples_register_widget() {
    register_widget('WPExamples_Widget_Text');
}
add_action('widgets_init', 'wpexamples_register_widget');

Теперь в админке в разделе Внешний вид > Виджеты появится ваш виджет с названием WPExamples Текстовый виджет.

Расширяем виджет: добавляем дополнительные настройки и возможности

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

Добавляем поле выбора цвета

Для выбора цвета удобно использовать HTML5 input type="color". Изменим метод form() следующим образом:

public function form($instance) {
    $title = isset($instance['title']) ? $instance['title'] : '';
    $text = isset($instance['text']) ? $instance['text'] : '';
    $color = isset($instance['color']) ? $instance['color'] : '#000000';
    ?>
    <p>
        <label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Заголовок:', 'wpexamples'); ?></label>
        <input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
    </p>
    <p>
        <label for="<?php echo esc_attr($this->get_field_id('text')); ?>"><?php _e('Текст:', 'wpexamples'); ?></label>
        <textarea class="widefat" id="<?php echo esc_attr($this->get_field_id('text')); ?>" name="<?php echo esc_attr($this->get_field_name('text')); ?>"><?php echo esc_textarea($text); ?></textarea>
    </p>
    <p>
        <label for="<?php echo esc_attr($this->get_field_id('color')); ?>"><?php _e('Цвет текста:', 'wpexamples'); ?></label>
        <input class="widefat" id="<?php echo esc_attr($this->get_field_id('color')); ?>" name="<?php echo esc_attr($this->get_field_name('color')); ?>" type="color" value="<?php echo esc_attr($color); ?>">
    </p>
    <?php
}

И не забудьте добавить обработку в методе update():

public function update($new_instance, $old_instance) {
    $instance = array();
    $instance['title'] = sanitize_text_field($new_instance['title']);
    $instance['text'] = sanitize_textarea_field($new_instance['text']);
    $instance['color'] = sanitize_hex_color($new_instance['color']);
    return $instance;
}

В методе 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'];
    }
    if (!empty($instance['text'])) {
        $color = !empty($instance['color']) ? $instance['color'] : '#000000';
        echo '<p style="color:' . esc_attr($color) . '">' . esc_html($instance['text']) . '</p>';
    }
    echo $args['after_widget'];
}

Используем плагины для упрощения работы с виджетами

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

  • Widget Options — расширяет управление виджетами, добавляет условия отображения;
  • Custom Sidebars — позволяет создавать собственные области виджетов;
  • SiteOrigin Widgets Bundle — набор мощных виджетов с визуальным редактором.

Но если нужно уникальное решение, писать свой виджет — лучший вариант.

Полезные советы для разработки виджетов в WordPress

Соблюдайте безопасность и фильтрацию данных

Обязательно используйте функции фильтрации данных: sanitize_text_field(), esc_html(), esc_attr() и т.д., чтобы избежать XSS-уязвимостей.

Соблюдайте стандарты WordPress

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

Тестируйте виджет на разных темах и устройствах

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

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

⭐⭐⭐⭐⭐
Оптимизация базы данных WordPress без потери данных: практические методы
15.12.2025
Как использовать хук pre_get_posts для тонкой фильтрации записей в WordPress
27.01.2026
Как создать подробный лог ошибок и действий в WordPress
26.11.2025
Как создать настройку для внешнего API в WordPress: подробное руководство
10.01.2026
Как отключить автоматическое обновление плагинов в WordPress
26.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее