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

|

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

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

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

В этой статье я расскажу, как создать и зарегистрировать собственный виджет в WordPress с помощью PHP-кода, как добавить настройки и вывести данные на сайте.

Создание класса виджета: структура и обязательные методы

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

Рассмотрим пример класса для простого виджета, который выводит приветствие с настраиваемым именем.

class Wporg_Widget_Greeting extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wporg_widget_greeting', // ID виджета
            'Приветствие от WPorg', // Название
            ['description' => 'Простой виджет с приветствием']
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        $name = !empty($instance['name']) ? $instance['name'] : 'гость';
        echo "<p>Привет, " . esc_html($name) . "! Добро пожаловать на сайт WPorg.</p>";
        echo $args['after_widget'];
    }

    public function form($instance) {
        $name = !empty($instance['name']) ? $instance['name'] : '';
        ?>
        <p>
            <label for="<?php echo esc_attr($this->get_field_id('name')); ?>">Имя:</label> 
            <input class="widefat" id="<?php echo esc_attr($this->get_field_id('name')); ?>" name="<?php echo esc_attr($this->get_field_name('name')); ?>" type="text" value="<?php echo esc_attr($name); ?>">
        </p>
        <?php
    }

    public function update($new_instance, $old_instance) {
        $instance = [];
        $instance['name'] = (!empty($new_instance['name'])) ? sanitize_text_field($new_instance['name']) : '';
        return $instance;
    }
}

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

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

function wporg_register_greeting_widget() {
    register_widget('Wporg_Widget_Greeting');
}
add_action('widgets_init', 'wporg_register_greeting_widget');

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

Расширение виджета: добавление дополнительных настроек и функционала

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

Для этого в методе form() добавим поле выбора цвета:

public function form($instance) {
    $name = !empty($instance['name']) ? $instance['name'] : '';
    $color = !empty($instance['color']) ? $instance['color'] : '#000000';
    ?>
    <p>
        <label for="<?php echo esc_attr($this->get_field_id('name')); ?>">Имя:</label> 
        <input class="widefat" id="<?php echo esc_attr($this->get_field_id('name')); ?>" name="<?php echo esc_attr($this->get_field_name('name')); ?>" type="text" value="<?php echo esc_attr($name); ?>">
    </p>
    <p>
        <label for="<?php echo esc_attr($this->get_field_id('color')); ?>">Цвет текста:</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 = [];
    $instance['name'] = (!empty($new_instance['name'])) ? sanitize_text_field($new_instance['name']) : '';
    $instance['color'] = (!empty($new_instance['color'])) ? sanitize_hex_color($new_instance['color']) : '#000000';
    return $instance;
}

В методе widget() используем цвет для стилизации текста:

public function widget($args, $instance) {
    echo $args['before_widget'];
    $name = !empty($instance['name']) ? $instance['name'] : 'гость';
    $color = !empty($instance['color']) ? $instance['color'] : '#000000';
    echo '<p style="color:' . esc_attr($color) . '">Привет, ' . esc_html($name) . '! Добро пожаловать на сайт WPorg.</p>';
    echo $args['after_widget'];
}

Примеры полезных виджетов для WordPress и плагины для работы с ними

Собственный виджет можно использовать для самых разных задач. Вот несколько примеров:

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

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

Советы по безопасности и производительности для собственных виджетов

При разработке виджетов важно учитывать безопасность. Никогда не выводите данные без очистки — используйте функции esc_html(), esc_attr(), sanitize_text_field() и другие для фильтрации входящих и исходящих данных.

Также следите за производительностью: избегайте тяжелых запросов к базе данных и внешним сервисам в методе widget(). Лучше кешировать результаты или использовать transient API для временного хранения данных.

Если виджет требует подключения скриптов или стилей, регистрируйте их корректно через хуки wp_enqueue_scripts и подключайте только на страницах, где виджет отображается.

Как автоматически отключить неиспользуемые плагины в WordPress
20.06.2026
Как создать собственный REST API endpoint в WordPress
14.11.2025
Как автоматизировать удаление нерабочих плагинов WordPress
28.01.2026
Как автоматизировать очистку кеша в WordPress: практические примеры и решения
25.03.2026
Как эффективно удалить пустые записи в базе данных WordPress
17.12.2025
×

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

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

пишет статьи

готовит SEO

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

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