WP_Widget

Базовый класс ядра для регистрации виджетов
Класс WordPress
INT 2.8.0
WordPress Icon

Описание класса

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

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

Класс WP_Widget предоставляет методы для отображения содержимого виджета, обновления настроек виджета, отображения формы настроек виджета и других операций, связанных с виджетами.

Методы

  • __construct(): PHP5 конструктор.
  • _get_display_callback(): Возвращает обратный вызов отображения виджета.
  • _get_form_callback(): Возвращает обратный вызов формы виджета.
  • _get_update_callback(): Возвращает обратный вызов обновления виджета.
  • _register(): Регистрирует все экземпляры виджетов этого класса виджета.
  • _register_one(): Регистрирует экземпляр класса виджета.
  • _set(): Устанавливает внутренний порядковый номер для экземпляра виджета.
  • display_callback(): Генерирует фактическое содержимое виджета (НЕ переопределять).
  • form(): Выводит форму обновления настроек.
  • form_callback(): Генерирует форму управления виджетом (НЕ переопределять).
  • get_field_id(): Создает атрибуты id для использования в полях WP_Widget::form().
  • get_field_name(): Создает атрибуты name для использования в полях form().
  • get_settings(): Получает настройки для всех экземпляров класса виджета.
  • is_preview(): Определяет, находится ли текущий запрос в предварительном просмотре пользовательского интерфейса.
  • save_settings(): Сохраняет настройки для всех экземпляров класса виджета.
  • update(): Обновляет конкретный экземпляр виджета.
  • update_callback(): Обрабатывает измененные настройки (НЕ переопределять).
  • widget(): Выводит содержимое виджета.
  • WP_Widget(): PHP4 конструктор (устарел).

Методы

display_callback()

Метод display_callback() генерирует фактическое содержимое виджета. Важно не переопределять этот метод.

WP_Widget::display_callback( array $args, int|array $widget_args = 1 )

Метод display_callback() принимает два параметра:

  • $args (обязательный) — аргументы отображения. См. метод WP_Widget::widget() для получения информации о принимаемых аргументах. Включает в себя ‘before_title’, ‘after_title’, ‘before_widget’ и ‘after_widget’.
  • $widget_args (необязательный) — внутренний порядковый номер экземпляра виджета или массив аргументов для множественных виджетов. По умолчанию: 1.

/**
 * Generates the actual widget content (Do NOT override).
 *
 * @param array $args       Display arguments. See WP_Widget::widget() for information on accepted arguments.
 *                          More Arguments from WP_Widget::widget( ... $args ) Display arguments including 'before_title',
 *                          'after_title', 'before_widget', and 'after_widget'.
 * @param int|array $widget_args Optional. Internal order number of the widget instance, or array of multi-widget arguments.
 *                              Default: 1.
 */
public function display_callback( $args, $widget_args = 1 ) {
    // Generate widget content here
}

form()

Метод form() класса WP_Widget используется для вывода формы обновления настроек виджета. Он позволяет разработчику определить, какие поля будут отображаться в форме и какие значения будут сохраняться при обновлении настроек виджета.

WP_Widget::form( array $instance ): string

Метод form() принимает один обязательный параметр:

  • $instance (array) — Текущие настройки виджета.

Метод возвращает строку, содержащую HTML-код формы обновления настроек виджета.

  • $instance (array) — Обязательный. Текущие настройки виджета. Этот массив содержит все сохраненные значения полей виджета.

Метод form() возвращает строку, содержащую HTML-код формы обновления настроек виджета. По умолчанию возвращается строка ‘noform’.

<?php
/**
 * Пример использования метода form() класса WP_Widget.
 *
 * @param array $instance Текущие настройки виджета.
 * @return string HTML-код формы обновления настроек виджета.
 */
function my_widget_form( $instance ) {
  // Создаем поля формы
  $title = ! empty( $instance['title'] ) ? $instance['title'] : '';
  $text = ! empty( $instance['text'] ) ? $instance['text'] : '';
  // Выводим форму
  $output = '';
  $output .= '<p>';
  $output .= '<label for="' . $this->get_field_id( 'title' ) . '">Заголовок:</label>';
  $output .= '<input class="widefat" id="' . $this->get_field_id( 'title' ) . '" name="' . $this->get_field_name( 'title' ) . '" type="text" value="' . esc_attr( $title ) . '" />';
  $output .= '</p>';
  $output .= '<p>';
  $output .= '<label for="' . $this->get_field_id( 'text' ) . '">Текст:</label>';
  $output .= '<textarea class="widefat" id="' . $this->get_field_id( 'text' ) . '" name="' . $this->get_field_name( 'text' ) . '">' . esc_textarea( $text ) . '</textarea>';
  $output .= '</p>';
  return $output;
}
?>

form_callback()

Метод form_callback() генерирует форму управления виджетом. Не рекомендуется переопределять данный метод.

WP_Widget::form_callback( int|array $widget_args = 1 ): string|null

Метод form_callback() принимает необязательный параметр $widget_args, который может быть либо числом, либо массивом аргументов для мульти-виджета. Возвращает строку или null.

$widget_args (int|array) (Optional) Внутренний порядковый номер экземпляра виджета или массив аргументов для мульти-виджета. По умолчанию: 1.

number (int) Инкремент, используемый для множественных виджетов с одинаковым именем. По умолчанию: 1.

Метод form_callback() возвращает строку или null.

<?php
/**
 * Пример использования метода form_callback()
 *
 * @param int|array $widget_args Внутренний порядковый номер экземпляра виджета или массив аргументов для мульти-виджета.
 * @return string|null
 */
function form_callback_example( $widget_args ) {
    // Ваш код здесь
}
?>

get_field_id()

Метод get_field_id() является частью класса WP_Widget и используется для создания атрибута ID для полей формы, которые используются в методе form(). Он конструирует уникальный идентификатор для каждого поля формы виджета.

WP_Widget::get_field_id( string $field_name ): string

Метод get_field_id() принимает один обязательный параметр:

  • $field_name (string) — Обязательное. Название поля формы виджета.

Метод возвращает строку — атрибут ID для указанного поля формы виджета.


/**
 * Пример использования метода get_field_id()
 *
 * @param string $field_name Название поля формы виджета.
 *
 * @return string Атрибут ID для указанного поля формы виджета.
 */
$field_id = $this->get_field_id( 'my_field' );

get_field_name()

Метод get_field_name() является частью класса WP_Widget, который является базовым классом для регистрации виджетов в WordPress. Данный метод используется для создания атрибута «name» для полей формы, которые используются в методе form().

WP_Widget::get_field_name( string $field_name ): string

Метод get_field_name() принимает один обязательный параметр:

  • $field_name (string) — Название поля.

Метод возвращает строку — атрибут «name» для указанного поля.

  • $field_name (string) — Обязательный. Название поля.

Параметр $field_name представляет собой строку, содержащую название поля.

Метод get_field_name() возвращает строку — атрибут «name» для указанного поля.

<code>$field_name = 'my_field';</code>
<code>$widget_instance = new My_Widget();</code>
<code>$field_name_attribute = $widget_instance->get_field_name( $field_name );</code>
<code>echo '<input type="text" name="' . $field_name_attribute . '" />';</code>

В данном примере мы создаем переменную $field_name и присваиваем ей значение «my_field». Затем мы создаем экземпляр класса My_Widget и вызываем метод get_field_name() с параметром $field_name. Результатом выполнения метода будет строка, содержащая атрибут «name» для поля. Затем мы выводим поле ввода текста с использованием полученного атрибута «name».

get_settings()

Метод get_settings() является частью класса WP_Widget, который является базовым классом для регистрации виджетов в WordPress. Он используется для получения настроек всех экземпляров класса виджета.

WP_Widget::get_settings(): array

Метод get_settings() не требует передачи аргументов. Он возвращает массив многомерных настроек для всех экземпляров класса виджета.

Код:

$settings = $this->get_settings();

В данном коде переменная $settings будет содержать массив с настройками всех экземпляров виджета.

Метод get_settings() возвращает многомерный массив с настройками всех экземпляров виджета. Каждый элемент массива представляет собой настройки одного экземпляра виджета.

is_preview()

Метод is_preview() является частью класса WP_Widget и используется для определения, находится ли текущий запрос в предварительном просмотре пользовательского интерфейса (Customizer preview).

Метод позволяет разработчикам WordPress проверить, находится ли сайт в режиме предварительного просмотра в пользовательском интерфейсе Customizer. Он возвращает логическое значение true, если сайт находится в предварительном просмотре, и false, если нет.

WP_Widget::is_preview(): bool

Метод is_preview() является публичным и статическим, поэтому он может быть вызван непосредственно из класса WP_Widget без создания экземпляра объекта.

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

if ( WP_Widget::is_preview() ) {
    // Код, который будет выполнен, если сайт находится в предварительном просмотре
} else {
    // Код, который будет выполнен, если сайт не находится в предварительном просмотре
}

В этом примере мы используем метод is_preview() для проверки, находится ли сайт в предварительном просмотре. Если сайт находится в предварительном просмотре, будет выполнен код внутри блока if. Если сайт не находится в предварительном просмотре, будет выполнен код внутри блока else.

Метод is_preview() возвращает логическое значение true, если сайт находится в предварительном просмотре пользовательского интерфейса Customizer, и false, если нет.

save_settings()

Метод save_settings() сохраняет настройки для всех экземпляров класса виджета. Он вызывается при сохранении настроек виджета в административной панели WordPress.

WP_Widget::save_settings( array $settings )

Метод save_settings() принимает один параметр:

  • $settings (обязательный): Многомерный массив настроек экземпляров виджета.

$settings (обязательный): Многомерный массив настроек экземпляров виджета.


/**
 * Пример использования метода save_settings()
 *
 * @param array $settings Многомерный массив настроек экземпляров виджета.
 */
$widget_instance_settings = array(
  'title' => 'Мой виджет',
  'count' => 5,
  'show_date' => true
);
// Сохранение настроек виджета
WP_Widget::save_settings( $widget_instance_settings );

update()

Метод update() используется для обновления конкретного экземпляра виджета. Он позволяет сохранить новые настройки, введенные пользователем, или отменить сохранение, если необходимо.

WP_Widget::update( array $new_instance, array $old_instance ): array

Метод update() принимает два обязательных параметра:

  • $new_instance (array) — Новые настройки для данного экземпляра виджета, введенные пользователем через метод WP_Widget::form().
  • $old_instance (array) — Старые настройки для данного экземпляра виджета.

Метод update() возвращает массив с настройками для сохранения или логическое значение false для отмены сохранения.

<code><?php
/**
 * Пример использования метода update()
 *
 * @param array $new_instance Новые настройки для данного экземпляра виджета
 * @param array $old_instance Старые настройки для данного экземпляра виджета
 *
 * @return array|bool Настройки для сохранения или логическое значение false для отмены сохранения
 */
public function update( $new_instance, $old_instance ) {
    // Обновляем настройки виджета
    $instance = $old_instance;
    $instance['title'] = sanitize_text_field( $new_instance['title'] );
    $instance['count'] = absint( $new_instance['count'] );
    
    return $instance;
}
?>

В приведенном выше примере кода метод update() обновляет настройки виджета. Он принимает новые настройки ($new_instance) и старые настройки ($old_instance) в качестве параметров. Затем он обновляет значения полей «title» и «count» в массиве $instance с помощью функций sanitize_text_field() и absint() соответственно. Наконец, метод возвращает обновленные настройки для сохранения.

update_callback()

Метод update_callback() используется для обработки измененных настроек виджета. Он вызывается при сохранении изменений в административной панели WordPress. Метод не должен переопределяться в дочерних классах.

WP_Widget::update_callback( int $deprecated = 1 )

Метод update_callback() не принимает никаких обязательных параметров.

$deprecated (int) (необязательно) Не используется. По умолчанию: 1.

Этот параметр не используется и оставлен для совместимости с предыдущими версиями WordPress. Вместо этого метод получает данные настроек виджета из массива $_POST.


/**
 * Обработка измененных настроек виджета.
 *
 * @param int $deprecated Не используется.
 * @return array Обновленные настройки виджета.
 */
public function update_callback( $deprecated = 1 ) {
    // Получаем данные настроек виджета из массива $_POST.
    $new_instance = $_POST['widget-' . $this->id_base . '-' . $this->number];
    // Валидация и обработка данных настроек.
    // Возвращаем обновленные настройки виджета.
    return $new_instance;
}

Метод update_callback() получает данные настроек виджета из массива $_POST и сохраняет их в переменную $new_instance. Затем происходит валидация и обработка данных настроек, если необходимо. В конце метод возвращает обновленные настройки виджета.

widget()

Метод widget() является частью класса WP_Widget и используется для вывода содержимого виджета. Он отвечает за отображение виджета на веб-странице.

Метод widget() выводит содержимое виджета, используя переданные аргументы $args и $instance. Он вызывается автоматически при отображении виджета на веб-странице.

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

WP_Widget::widget( array $args, array $instance )

Метод widget() принимает два обязательных параметра:

  • $args — массив с аргументами отображения, включая ‘before_title’, ‘after_title’, ‘before_widget’ и ‘after_widget’.
  • $instance — массив с настройками для конкретного экземпляра виджета.
<?php
class My_Widget extends WP_Widget {
  public function widget( $args, $instance ) {
    // Выводим заголовок виджета
    echo $args['before_widget'];
    echo $args['before_title'] . 'Заголовок виджета' . $args['after_title'];
    // Выводим содержимое виджета
    echo '<div class="widget-content">';
    echo 'Содержимое виджета';
    echo '</div>';
    // Выводим закрывающий тег виджета
    echo $args['after_widget'];
  }
}
?>

В этом примере мы создаем подкласс My_Widget, который наследуется от класса WP_Widget. Метод widget() переопределен для вывода заголовка виджета, содержимого и закрывающего тега виджета.

Мы используем переданные аргументы $args и $instance для настройки отображения виджета.

Заголовок виджета выводится с помощью $args['before_title'] и $args['after_title']. Содержимое виджета выводится внутри тега <div class="widget-content">. Закрывающий тег виджета выводится с помощью $args['after_widget'].

Вы можете изменить логику отображения виджета в методе widget() в соответствии с вашими потребностями.

  • $args (array) — Обязательный. Аргументы отображения, включая ‘before_title’, ‘after_title’, ‘before_widget’ и ‘after_widget’.
  • $instance (array) — Обязательный. Настройки для конкретного экземпляра виджета.

WP_Widget()

Метод WP_Widget() является конструктором класса WP_Widget и используется для создания нового виджета WordPress. Он был устаревшим и заменен на метод __construct(). Метод WP_Widget() выполняет инициализацию виджета, устанавливает его базовый ID, имя и опции.

WP_Widget::WP_Widget( string $id_base, string $name, array $widget_options = array(), array $control_options = array() )

Метод WP_Widget() принимает следующие параметры:

  • $id_base (обязательный): Базовый ID для виджета, должен быть в нижнем регистре и уникальным. Если оставить пустым, будет использована часть имени класса PHP виджета. Должен быть уникальным.
  • $name (обязательный): Имя виджета, отображаемое на странице настройки.
  • $widget_options (необязательный): Опции виджета. См. функцию wp_register_sidebar_widget() для получения информации о принимаемых аргументах. По умолчанию: array().
  • $control_options (необязательный): Опции управления виджетом. См. функцию wp_register_widget_control() для получения информации о принимаемых аргументах. По умолчанию: array().
<code>/**
 * Пример создания нового виджета.
 */
class My_Widget extends WP_Widget {
    /**
     * Конструктор класса виджета.
     *
     * @param string $id_base         Базовый ID для виджета.
     * @param string $name            Имя виджета.
     * @param array  $widget_options  Опции виджета.
     * @param array  $control_options Опции управления виджетом.
     */
    public function __construct( $id_base, $name, $widget_options = array(), $control_options = array() ) {
        parent::__construct( $id_base, $name, $widget_options, $control_options );
        // Дополнительная логика инициализации виджета.
    }
}

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

_get_display_callback()

Метод _get_display_callback() является вспомогательным методом класса WP_Widget, который используется для получения обратного вызова отображения виджета.

WP_Widget::_get_display_callback(): callable

Метод _get_display_callback() возвращает обратный вызов отображения виджета в виде callable функции или метода класса.

Код метода:

protected function _get_display_callback() {
    return array( $this, 'widget' );
}

Метод _get_display_callback() возвращает массив, содержащий текущий экземпляр класса виджета $this и строку ‘widget’ в качестве имени метода обратного вызова. Это означает, что метод widget() класса виджета будет использоваться для отображения виджета.

Метод _get_display_callback() возвращает обратный вызов отображения виджета в виде callable функции или метода класса.

_get_form_callback()

Метод _get_form_callback() является внутренним методом класса WP_Widget. Он используется для получения обратного вызова формы виджета.

Метод _get_form_callback() является частью базового класса WP_Widget, который расширяется для регистрации виджетов в WordPress.

WP_Widget::_get_form_callback(): callable

Метод _get_form_callback() возвращает обратный вызов формы виджета в виде callable функции.

Обратный вызов формы виджета используется внутри класса WP_Widget для отображения формы на странице административной панели WordPress.

Код метода _get_form_callback() содержит подробные комментарии, которые объясняют его работу и использование.

Метод _get_form_callback() возвращает callable обратный вызов формы виджета.

_get_update_callback()

Метод _get_update_callback() является вспомогательным методом класса WP_Widget, который используется для получения обратного вызова обновления виджета. Обратный вызов обновления виджета определяет, какие данные виджета должны быть сохранены при его обновлении.

WP_Widget::_get_update_callback(): callable

Метод _get_update_callback() возвращает обратный вызов обновления виджета в виде callable.

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

Метод _get_update_callback() возвращает обратный вызов обновления виджета в виде callable. Обратный вызов обновления виджета является функцией или методом, которая будет вызываться при обновлении виджета для сохранения его данных.

_register()

Метод _register() является вспомогательным методом класса WP_Widget, который используется для регистрации всех экземпляров виджета данного класса.

Данный метод выполняет следующие действия:

  • Регистрирует виджет в системе WordPress.
  • Создает экземпляр виджета и добавляет его в список зарегистрированных виджетов.

Метод _register() вызывается автоматически при инициализации класса виджета и не требует явного вызова.

WP_Widget::_register();

Метод _register() вызывается автоматически при инициализации класса виджета и не требует явного вызова.

Внутри метода происходит следующее:

  • Проверяется, был ли виджет уже зарегистрирован. Если да, то метод завершается без выполнения дополнительных действий.
  • Создается экземпляр класса виджета.
  • Вызывается метод WP_Widget::register() для регистрации виджета в системе WordPress.
  • Добавляется экземпляр виджета в список зарегистрированных виджетов.

После выполнения метода виджет будет доступен для использования в административной панели WordPress или на сайте.

_register_one()

Метод _register_one() является частью класса WP_Widget и используется для регистрации экземпляра виджета. Он расширяет базовый класс WP_Widget, который является основным классом для создания и управления виджетами в WordPress.

Метод _register_one() регистрирует экземпляр класса виджета. Он принимает один параметр — уникальный порядковый номер этого экземпляра виджета по сравнению с другими экземплярами того же класса.

WP_Widget::_register_one( int $number = -1 )

Метод _register_one() вызывается статически, поэтому он может быть использован без создания экземпляра класса WP_Widget. Он принимает необязательный параметр $number, который представляет собой уникальный порядковый номер этого экземпляра виджета. По умолчанию значение параметра равно -1.

$number int: Необязательный параметр. Уникальный порядковый номер этого экземпляра виджета по сравнению с другими экземплярами того же класса. Значение по умолчанию: -1.


/**
 * Пример кода для метода _register_one()
 *
 * Регистрирует экземпляр виджета с уникальным порядковым номером.
 *
 * @param int $number Уникальный порядковый номер экземпляра виджета.
 * @return void
 */
WP_Widget::_register_one( $number = -1 );

_set()

Метод _set() устанавливает внутренний порядковый номер для экземпляра виджета. Он используется для определения порядка отображения виджетов на странице.

WP_Widget::_set( int $number )

Метод _set() принимает один обязательный параметр:

  • $number (int) — Уникальный порядковый номер этого экземпляра виджета по сравнению с другими экземплярами того же класса.

/**
 * Устанавливает порядковый номер виджета.
 *
 * @param int $number Уникальный порядковый номер виджета.
 */
public function _set( $number ) {
    $this->number = (int) $number;
}

В приведенном выше примере кода метод _set() устанавливает внутреннюю переменную $number экземпляра виджета равной переданному параметру $number. Переданный параметр приводится к типу int с помощью функции (int).

__construct()

Метод «__construct()» является конструктором класса «WP_Widget» и используется для создания нового виджета WordPress. Он вызывается при создании экземпляра класса и выполняет необходимые действия для инициализации виджета.

Конструктор «__construct()» является частью ядра WordPress и наследуется от базового класса. Он предоставляет возможность регистрации виджетов и определения их параметров.

WP_Widget::__construct( string $id_base, string $name, array $widget_options = array(), array $control_options = array() )

Метод «__construct()» принимает следующие параметры:

  • $id_base (строка, обязательный) — Базовый идентификатор для виджета, записанный в нижнем регистре и должен быть уникальным. Если оставить пустым, будет использована часть имени PHP-класса виджета. Должен быть уникальным.
  • $name (строка, обязательный) — Название виджета, отображаемое на странице настройки.
  • $widget_options (массив, необязательный) — Дополнительные параметры виджета. Смотрите функцию wp_register_sidebar_widget() для получения информации о принимаемых аргументах. По умолчанию: array().
  • $control_options (массив, необязательный) — Дополнительные параметры управления виджетом. Смотрите функцию wp_register_widget_control() для получения информации о принимаемых аргументах. По умолчанию: array().
<code>$id_base</code> = 'my_widget';
<code>$name</code> = 'My Widget';
<code>$widget_options</code> = array(
  'classname' => 'my-widget-class',
  'description' => 'This is my custom widget.',
);
<code>$control_options</code> = array(
  'width' => 300,
  'height' => 200,
);
<code>$my_widget</code> = new WP_Widget( <code>$id_base</code>, <code>$name</code>, <code>$widget_options</code>, <code>$control_options</code> );

В приведенном выше примере создается новый виджет с базовым идентификатором «my_widget» и названием «My Widget». Дополнительные параметры виджета и управления задаются в массивах $widget_options и $control_options. После создания экземпляра класса виджет можно зарегистрировать с помощью функции register_widget().

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

Создание экземпляра класса WP_Widget


class My_Widget extends WP_Widget {
    public function __construct() {
        // Вызов конструктора родительского класса
        parent::__construct(
            'my_widget', // Уникальный идентификатор виджета
            'My Widget', // Название виджета
            array( 'description' => 'Описание виджета' ) // Опции виджета
        );
    }
}

Настройка параметров виджета


class My_Widget extends WP_Widget {
    public function form( $instance ) {
        // Получение текущих значений параметров виджета
        $title = ! empty( $instance['title'] ) ? $instance['title'] : '';
        $text = ! empty( $instance['text'] ) ? $instance['text'] : '';
        // Вывод формы для настройки параметров виджета
        ?>
        <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>
        <p>
            <label for="<?php echo $this->get_field_id( 'text' ); ?>">Текст:</label>
            <textarea class="widefat" id="<?php echo $this->get_field_id( 'text' ); ?>" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo esc_textarea( $text ); ?></textarea>
        </p>
        <?php
    }
}

Обновление настроек виджета


class My_Widget extends WP_Widget {
    public function update( $new_instance, $old_instance ) {
        // Сохранение новых значений параметров виджета
        $instance = array();
        $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';
        $instance['text'] = ( ! empty( $new_instance['text'] ) ) ? sanitize_text_field( $new_instance['text'] ) : '';
        return $instance;
    }
}

Отображение виджета на сайте


class My_Widget extends WP_Widget {
    public function widget( $args, $instance ) {
        // Вывод контента виджета на сайте
        echo $args['before_widget'];
        $title = apply_filters( 'widget_title', $instance['title'] );
        $text = apply_filters( 'widget_text', $instance['text'] );
        if ( ! empty( $title ) ) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        if ( ! empty( $text ) ) {
            echo '<p>' . $text . '</p>';
        }
        echo $args['after_widget'];
    }
}

Регистрация виджета в WordPress


function my_register_widget() {
    register_widget( 'My_Widget' );
}
add_action( 'widgets_init', 'my_register_widget' );

Вопросы и ответы

Как зарегистрировать виджет в WordPress?

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


class My_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'my_widget', // Уникальный идентификатор виджета
            'Мой виджет', // Название виджета
            array( 'description' => 'Описание моего виджета' ) // Описание виджета
        );
    }
}

После создания класса виджета, его необходимо зарегистрировать с помощью метода register_widget(). Это можно сделать в функции widgets_init, которая вызывается при инициализации виджетов в WordPress.


function my_register_widgets() {
    register_widget( 'My_Widget' );
}
add_action( 'widgets_init', 'my_register_widgets' );

Как создать настройки для виджета в WordPress?

Для создания настроек виджета в WordPress необходимо переопределить метод form() в классе виджета. В этом методе можно добавить поля для настроек виджета, такие как текстовые поля, выпадающие списки и т.д.


class My_Widget extends WP_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
    }
}

Как обновить настройки виджета в WordPress?

Для обновления настроек виджета в WordPress необходимо переопределить метод update() в классе виджета. В этом методе можно обработать и сохранить новые значения настроек виджета.


class My_Widget extends WP_Widget {
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';
        return $instance;
    }
}

Как вывести содержимое виджета на сайте?

Для вывода содержимого виджета на сайте необходимо переопределить метод widget() в классе виджета. В этом методе можно сгенерировать и вывести HTML-код виджета с помощью функций WordPress.


class My_Widget extends WP_Widget {
    public function widget( $args, $instance ) {
        $title = apply_filters( 'widget_title', $instance['title'] );
        echo $args['before_widget'];
        if ( ! empty( $title ) ) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        echo '<p>Содержимое виджета</p>';
        echo $args['after_widget'];
    }
}

Как изменить порядок отображения виджетов на сайте?

Для изменения порядка отображения виджетов на сайте в WordPress можно использовать метод _set класса WP_Widget. Этот метод позволяет установить внутренний порядковый номер для экземпляра виджета.


/**
 * Sets the internal order number for the widget instance.
 *
 * @since 2.8.0
 *
 * @param int $number Order number for the widget instance.
 */
protected function _set( $number ) {
    $this->number = (int) $number;
}

Как удалить виджет из панели управления WordPress?

Для удаления виджета из панели управления WordPress необходимо использовать метод wp_unregister_widget_control. Этот метод отменяет регистрацию формы управления виджетом.


/**
 * Unregisters the widget control form.
 *
 * @since 2.8.0
 *
 * @param string $id_base Optional base ID for the widget, lowercase and unique.
 */
function wp_unregister_widget_control( $id_base ) {
    global $wp_registered_widget_controls;
    if ( isset( $wp_registered_widget_controls[ $id_base ] ) ) {
        unset( $wp_registered_widget_controls[ $id_base ] );
    }
}

Как добавить дополнительные поля в форму настроек виджета?

Для добавления дополнительных полей в форму настроек виджета в WordPress можно использовать метод form класса WP_Widget. Этот метод выводит форму обновления настроек виджета.


/**
 * Outputs the settings update form.
 *
 * @since 2.8.0
 *
 * @param array $instance Current settings.
 */
public function form( $instance ) {
    // Add additional fields here
}

Как создать несколько экземпляров одного виджета с разными настройками?

Для создания нескольких экземпляров одного виджета с разными настройками в WordPress можно использовать метод update класса WP_Widget. Этот метод обновляет настройки конкретного экземпляра виджета.


/**
 * Updates a particular instance of a widget.
 *
 * @since 2.8.0
 *
 * @param array $new_instance New settings for this instance as input by the user via form().
 * @param array $old_instance Old settings for this instance.
 * @return array Settings to save or bool false to cancel saving.
 */
public function update( $new_instance, $old_instance ) {
    // Update instance settings here
}

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

Обсуждение