Виджеты позволяют добавлять различные элементы в специальные области, называемые зонами виджетов, что значительно упрощает процесс заполнения сайта. Стандартные виджеты отвечают за вывод 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");'));
Связанные материалы:


