Виджеты позволяют добавлять различные элементы в специальные области, называемые зонами виджетов, что значительно упрощает процесс заполнения сайта. Стандартные виджеты отвечают за вывод RSS, отображение последних записей, перечисление страниц, рубрик и т.д. Очень часто стандартной функциональности, поставляемой виджетами, не хватает; плагины призваны восполнить образовавшийся пробел.
Благодаря новому набору API функций, появившихся в WordPress 2.8, создание виджетов для плагинов стало на порядок проще. Все, что теперь необходимо сделать, это расширить встроенный класс виджетов WP_Widget, передать ему некоторые команды и затем провести регистрацию виджета.
class SmashingWidget extends WP_Widget { function SmashingWidget() { // The actual widget code goes here } function widget($args, $instance) { // Output the widget content } function update($new_instance, $old_instance) { // Process and save the widget options } function form($instance) { // Output the options form in admin } } register_widget('SmashingWidget');
В примере, приведенном выше, к стандартному классу WP_Widget был добавлен новый виджет SmashingWidget. Первая функция SmashingWidget() определяет сам виджет и его функциональные возможности. Функции widget(), update() и form() задают требуемое поведение виджета.
Никаких кнопок по отмене или подтверждению действий нет, поскольку эти возможности уже встроены в API виджетов.
Создание виджета
Создадим простой виджет, который будет выводить текст приветствия, и предоставим возможность пользователю изменять этот текст в панели администратора.
1. Расширяем стандартный класс виджетов новым виджетом SmashingHello:
class SmashingHello extends WP_Widget {
2. Привязываем к нему функцию SmashingHello():
function SmashingHello() { parent::WP_Widget(false, $name = 'Smashing Hello'); }
3. С целью добавления интересных возможностей привязываем функцию widget():
function widget($args, $instance) { extract( $args ); ?> <?php echo $before_widget; ?> <?php echo $before_title . $instance['title'] . $after_title; ?> Well hello there! Ain't that just Smashing? <?php echo $after_widget; ?> <?php }
4. Привязываем функцию update():
function update($new_instance, $old_instance) { return $new_instance; }
5. Привязываем функцию form():
function form($instance) { $title = esc_attr($instance['title']); ?> <p> <label for="<?php echo $this->get_field_id('title'); ?>">Title: <input id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></label> </p> <?php }
6. Регистрируем виджет:
} add_action('widgets_init', create_function('', 'return register_widget("SmashingHello");'));