- Описание класса
- Методы
- display_callback()
- form()
- form_callback()
- get_field_id()
- get_field_name()
- get_settings()
- is_preview()
- save_settings()
- update()
- update_callback()
- widget()
- WP_Widget()
- _get_display_callback()
- _get_form_callback()
- _get_update_callback()
- _register()
- _register_one()
- _set()
- __construct()
- Примеры использования
- Создание экземпляра класса WP_Widget
- Настройка параметров виджета
- Обновление настроек виджета
- Отображение виджета на сайте
- Регистрация виджета в WordPress
- Вопросы и ответы
- Как зарегистрировать виджет в WordPress?
- Как создать настройки для виджета в WordPress?
- Как обновить настройки виджета в WordPress?
- Как вывести содержимое виджета на сайте?
- Как изменить порядок отображения виджетов на сайте?
- Как удалить виджет из панели управления WordPress?
- Как добавить дополнительные поля в форму настроек виджета?
- Как создать несколько экземпляров одного виджета с разными настройками?
Описание класса
Класс 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 и позволяет разработчикам создавать гибкие и настраиваемые виджеты для своих сайтов.