Поддержка виджетов

Дата публикации:Сентябрь 11, 2010

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

Оставить комментарий

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

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