Регистрация виджета с помощью функции wp_register_sidebar_widget()

# WP_REGISTER_SIDEBAR_WIDGET() │ WP 2.2.0

Функция wp_register_sidebar_widget() регистрирует виджет в WordPress. Это позволяет добавлять интерактивные элементы, такие как текстовые блоки или формы, в боковые панели вашего сайта.

## Описание функции

По умолчанию, виджет имеет опцию «classname», которую можно перезаписать. Функция также может использоваться для отмены регистрации виджетов, если параметр $output_callback оставлен пустым.

### Возврат

Функция ничего не возвращает (null).

## Синтаксис использования

```php
wp_register_sidebar_widget( $id, $name, $output_callback, $options, ...$params );
  • $id (int|string) — обязательный параметр. Уникальный идентификатор для виджета.
  • $name (string) — обязательный параметр. Название, которое будет отображаться для виджета.
  • $output_callback (callable) — обязательный параметр. Функция, которая будет выполняться при вызове виджета.
  • $options (array) — массив дополнительных опций для виджета.
    • classname (string) — имя класса для HTML-контейнера виджета. По умолчанию — сокращённая версия имени функции обратного вызова.
    • description (string) — описание виджета, которое будет отображаться в административной панели.
    • show_instance_in_rest (true|false) — показывает настройки виджета в REST API. Доступно только для виджетов, основанных на WP_Widget.
  • ...$params (mixed) — необязательные дополнительные параметры, которые будут переданы функции обратного вызова при её вызове.

Примеры использования

Пример 1: Создание виджета

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

wp_register_sidebar_widget(
    'your_widget_1',       // идентификатор виджета
    'My widget',           // заголовок виджета
    'your_widget_display',  // функция обратного вызова
    // Настройки
    array( 
        'description' => 'Описание виджета, для чего он нужен и что делает'
    )
);

function your_widget_display( $args ) {
    extract($args);
    echo $before_widget;

    echo $before_title . 'Мой уникальный виджет' . $after_title;
    // Код виджета, который будет отображаться в шаблоне
    echo "Тест вашего виджета";

    echo $after_widget;
}

Пример 2: Регистрация рекурсивного виджета

При регистрации виджета с помощью wp_register_sidebar_widget(), он может быть использован только один раз и добавлен только в одну боковую панель. Чтобы зарегистрировать виджеты, которые могут использоваться несколько раз, используйте register_widget():

class My_New_Widget extends WP_Widget {
    function My_New_Widget () {
        // Создание экземпляра родительского объекта
        parent::__construct( false, 'Новый заголовок виджета' );
    }

    function widget( $args, $instance ) {
        // Вывод виджета на экран
    }

    function update( $new_instance, $old_instance ) {
        // Сохранение настроек виджета
    }

    function form( $instance ) {
        // Форма настроек виджета в админ-панели
    }
}

function register_My_New_Widget() {
    register_widget( 'My_New_Widget' );
}

add_action( 'widgets_init', 'register_My_New_Widget' );

Заметки

  • Глобальный массив: $wp_registered_widgets содержит зарегистрированные виджеты.
  • Глобальный массив: $wp_registered_widget_controls хранит настройки зарегистрированных виджетов.
  • Глобальный массив: $wp_registered_widget_updates управляет обновлениями виджетов.

Изменения

  • С версии 2.2.0: Функция была введена.
  • С версии 5.3.0: Параметр ...$params был формализован и добавлен в сигнатуру функции.
  • С версии 5.8.0: Добавлена опция show_instance_in_rest.

Связанные функции

  • dynamic_sidebar()
  • is_active_sidebar()
  • is_active_widget()
  • register_sidebar()
  • register_widget()
  • wp_unregister_sidebar_widget()

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *