Все для WORDPRESS



Как написать wordpress виджет

24 августа 2008

Плагины в wordpress – это независимые подпрограммы, которые дополняют или изменяют функциональность wordpress`а. Если вы хотите как-то визуализировать ваш плагин на страницах вашего блога, то вам нужно написать виджет для этого плагина. Другими словами, да, виджет – это визуальная часть вашего wordpress плагина.
Хотя, если быть точным, то виджет может существовать и независимо от плагина.

Быстрый старт.

Рассмотрим простейший виджет.

<?php
/*
Plugin Name: My first widget
*/

function my_first_widget($args) {

extract($args);

echo $before_widget;
echo $before_title;
echo ‘Title’;
echo $after_title;
echo ‘<center>My first widget</center>’;
echo $after_widget;

}

function register_my_widget() {
register_sidebar_widget(‘Widget name’, ‘my_first_widget’);
}

add_action(‘init’, ‘register_my_widget’);
?>

После активации этого плагина в сайдбар можно будет добавить виджет с именем ‘Widget name’. Этот виджет просто выводит текст “My first widget” в блок с заголовком Title.
Выглядит это примерно так:

Теперь разберу про исходник… В wordpress каждый виджет определяется двумя вещами – уникальным именем и функцией вывода. С именем понятно, а функция вывода – это любая функция, которая что-то выводит в браузер.

В моем случае это функция my_first_widget.
Строка

extract($args);

просто вытаскивает перменнные $before_widget, $before_title, $after_title, $after_widget из массива $args.

Зачем нужны эти переменные? Дело в том, что все виджеты в некоторой степени унифицированы в плане дизайна при выводе. В моей теме, например все виджеты размечаются через html так:

<li class=“widget my_first_widget” id=“widget-name”>
<h2 class=“widgettitle”>Title</h2>
<center>My first widget</center>
</li>

Здесь как раз видно все эти переменные:

  1. $before_widget = <li class=”widget my_first_widget” id=”widget-name”>
  2. $before_title = <h2 class=”widgettitle”>
  3. $after_title = </h2>
  4. $after_widget = </li>

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

Следующая функция

register_sidebar_widget

нужная для регистрации виджета (чтобы он появился в адмике).
Такой специфический способ ее запуска (через add_action(‘init’, ‘register_my_widget’)) я выбрал не случайно. Может так получиться, что код вашего виджета будет подключен раньше, чем библиотека с функцией register_sidebar_widget. Привязка регистрации моего виджета к действию init исключит такую вероятность, так как оно вызывается после подключения всех библиотек.

Так вот, допустим, теперь нам нужно добавить возможность изменять заголовок виджета. Чтобы вместо Title писалось что-то другое. Знакомая задачка да? :) Но нет. На этот раз мы решим ее по-другому.

В wordpress для виджетов есть свои настройки, которые предназначены для управления внешним видом, например.
Виджеты, которые так можно настроить в админке, выглядят так:

У моего виджета пока нет настроек, поэтому нет и значка.
Ничего, сейчас исправим ?

Для регистрации панели управления виджетом нужно тоже только две функции.
Первая – выводит список полей с настройками, а вторая – регистрирует эту панель управления.

Вот первая :

<?php
function my_widget_control() {

if (!empty($_REQUEST['my_widget_title'])) {
update_option(‘my_widget_title’, $_REQUEST['my_widget_title']);
}
?>
Заголовок&nbsp;:&nbsp;<input type=“text” name=“my_widget_title” />
<?

}
?>

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

Вторую функцию

register_widget_control(’Widget name’, ‘my_widget_control’ );

помещаем внутрь register_my_widget.

Теперь мой виджет полностью работоспособен.
Вот его код:

<?php
/*
Plugin Name: My first widget
Plugin URI: http://www.wpsoftblog.ru/my_first_widget.zip
Author: Novice
Author URI: http://
www.wpsoftblog.ru
*/

function my_first_widget($args) {

extract($args);

echo $before_widget;
echo $before_title;
echo get_option(‘my_widget_title’);
echo $after_title;
echo ‘<center>My first widget</center>’;
echo $after_widget;

}

function register_my_widget() {
register_sidebar_widget(‘Widget name’, ‘my_first_widget’);
register_widget_control(‘Widget name’, ‘my_widget_control’ );
}

function my_widget_control() {

if (!empty($_REQUEST['my_widget_title'])) {
update_option(‘my_widget_title’, $_REQUEST['my_widget_title']);
}
?>
Заголовок&nbsp;:&nbsp;<input type=“text” name=“my_widget_title” />
<?

}

add_action(‘init’, ‘register_my_widget’);
?>

Скачать его для препарирования можно здесь “Мой первый виджет”.

Категория: плагины




Вы можете прокомментировать мою запись

Необходимо авторизироваться

    Метки

    rss wordpress Виджеты Интересное Коммерция Новости администрирование плагины полезное реклама сео социальные закладки социальные сети спам статистика темы

    Архивы

    • Июнь 2010
    • Декабрь 2009
    • Ноябрь 2009
    • Октябрь 2009
    • Сентябрь 2009
    • Август 2009
    • Июль 2009
    • Июнь 2009
    • Май 2009
    • Апрель 2009
    • Март 2009
    • Февраль 2009
    • Январь 2009
    • Декабрь 2008
    • Ноябрь 2008
    • Октябрь 2008
    • Сентябрь 2008
    • Август 2008

    Страницы

    • Реклама в блоге

    Рубрики

    • wordpress
    • Новости
    • плагины
    • полезное
    • темы

    Последние записи

    • Автоматическая очистка корзины
    • Вышел WordPress 2.9
    • Вышла версия 2.8.6
    • Началось тестирование WordPress 2.9
    • Создай уникальный шаблон

    Ссылки

    • “Клуб болельщиков”
    • Блог Гайзер Сергея
    • Статьи

    Управление

    • Регистрация
    • Вход
    • RSS Записей
    • RSS Комментариев
    • WordPress.org