Как написать виджет для WordPress? Свернуть полный текст Создаем папку icq_widget, и в ней соответственно файл icq_widget.php, в начале поместим описаниеплагина которое будет выводиться при его активации на странице плагином в админке WordPress.

Собственно хочется поделиться моим первым оптом создания сего чуда

Будем учиться на примере моего ICQ-виджета.
Виджет работает как плагин, но использует немного другие функции.

по сути виджет как и любой другой плагин состоит из набора PHP файлов в директории, которую мы заливаем в директорию wp-content/plugins. Созаем папку icq_widget, и в ней соответственно файл icq_widget.php, в начале поместим описание плагина которое будет выводиться при его активации на странице плагином в админке WordPress.

пример:

/ * Plugin Name: ICQ Widget Plugin URI: http://zakatnov.ru/icq_widget Описание: Добавляет на сайдбар виджет для отправки адинистратору сайта
сообщения ICQ Версия: 1.0.0 Автор: Александр Zakatnov Автор URI: http://zakatnov.ru Лицензия: GPL программное обеспечение поставляется без каких-либо гарантий, явных или иначе, и в случае его поломки летУра блоге или на результаты Вашей кошке брился, это не моя вина. Copyright 2009 Александр Александрович Zakatnov (электронная почта: alexander@zakatnov.ru) Эта программа является свободным программным обеспечением; вы можете распространять его и / или модифицировать ее в соответствии с условиями GNU General PublicЛицензии, опубликованных Free Software Foundation; либо версии 2 Лицензии, либо (по вашему выбору) любой более поздней версии. Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемой гарантииКОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. GNU General Public License для более подробной информации. Вы должны были получить копию GNU General Public License вместе с этой программой, если нет, напишите в Free Software Foundation,Вкл., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * /

То есть Wordpress потом парсит этот комментарий и получает из него название плагина (Plugin Name:), автора (AuthoR:), номер версии и прочую информацию, я думаю там и так все интуитивно понятно

Перейдем непосредственно к реализации.
Будем отталкиваться от функционала нашего виджета, поставим цели - виджет должен позволять отправлять сообщение с сайта администратору. Отсюда следует вывод: Нам нужно знать номер ICQ куда отправляем сообщение и номер и пароль ICQ откуда мы отправляем сообщение, в принципе это может быь один и тот же номер, но тогда могут появиться проблемы если номер ICQ будет активно использоваться с обычного клиента, поэтому лучше зарегистрировать отдельный UIN.

Для работы с протоколом OSCAR будем использовать уже написанный класс WebIcqClass за что спасибо его автору.
ак как класс давно не обновлялся, а AOL активно вносит изменения в протокол мне пришлось немного его подправить, поэтому можете скачать исправитьверсию отсюда.

Для начала инклудим этот класс в наш icq_widget.php:

require_once ( "icq_class / WebIcqPro.class.php");

и приступаем к реализации функции которабудет отправлять сообщение и выводить форму на страницы сайта:

Функция icq_widget ($ аргументы) (экстракта ($ аргументы); $ = get_option ссылок ( 'icq_widget'); $ UIN = $ страницу [ 'UIN']; пасс $ = $ страницу [ 'PasS ']; uin_rec $ = $ страницу [' uin_rec ']; $ COLS = $ страницу [' COLS ']; строк $ = $ страницу [' строка ']; widget_title $ = $ страницу [' widget_title '], если ( Исеть ($ _POST [ 'icq_text'])) ($ Text = strip_tags (stripslashes ($ _POST [ 'icq_text если'])); (function_exists (Iconv)) ($ TeXT = Iconv ( "UTF-8", "Windows-1251", $ Text);) = $ ICQ новой WebIcqPro (); $ ICQ-> Connect ($ UIN, $ PASS), если ($ ICQ-> IsConnected ( )) (if ($ ICQ-> SendMessage ($ uin_rec, $ Text)) ($ result = "Сообщение успешно отправлено!";) ($ другого результата = "Ошибка Sendinг. Пожалуйста, повторите попытку позже. ";) $ ICQ-> Disconnect ();) ($ другого результата = $ ICQ-> Error;)) Эхо $ before_widget; Эхо" <div id='icq_div'> ". Before_title $. $ widget_title. after_title $; Эхо "<form method='POST'> <текстовое поле Name = 'icq_text'Строка ='".$ строк. "' COLS ='".$ COLS ."'></ TEXTAREA> <br> <input type='submit' value='отправить'> <P стиль = 'Размер шрифта : 0.9em; шрифта Цвет:
# 333 ;'>".$ результат ". </ P> </ FORM> </ div>"; Echo$ after_widget;)

Эта функция будет принимать в качестве параметра ассоциативный массив в котором содержится информация о настройке оформлеия виджета заданный темой оформления, этот массив мы передаем в качестве параметра функции экстракта и в итоге получаем просто 4 переменных - $before_widget, $ after_widget, $ before_title, $ after_title. Можете открыть файл functions.php в папке вашей темы оформления и посмотреть что хранится в этих переменных. Мбудем использовать эти переменные при выводе формы виджета.
Дальше с помощью функции РГ get_option получаем ассоциативный массив с настроками виджета, которые мы будем задавать при добавлении его на сайдбар в админке. И для удобства обращения к значениям создаем переменне в которых хранится значение определенной настройки.

А вот дальше очень интересная часть, мы проверяем была ли нажата кнопка "Отправить "и если была нажата (то есть в $ _POST [ 'Текст'] есть какой-то текст на отправку), то мы сначала обрабатываем текст который ввел наш гость, переводим его в кодировку Windows-1251, так как протокол OSCAR работает только с ней и пытаемся отправить - создаем объект класса WebIcqPro и вызываем меод соединить в который в качестве параметра передаем передаем переменные $ UIN и $ проход (которые как ты помнишь мы получили с помощью функции get_option).Далее проверяем удалось ли подключиться с помощью метода IsConnected, если подключены то уже пытаемся отправить сообщение методом SendMessage пердавая ему в качестве параметра номер куда отправляем и текст сообщения который мы с вами обрабатывали, и если все отправилось то пишем впеременную которую будем показывать гостю что сообщение успешно отправлено, если не отправлено то, соответственно пишем что не отправлено и отсоединяемся от AOLовского сервера.

Далее выводим форму нас страницу. Это делается очень просто я думаю тебе не составит трудностей разобраться в обычных тегах HTML. Только стоит заметить что тут используются переменные которые мы получили из массива который WordPressпередал основной функции в качестве параметра.
Мы закончили с функцией которая отправляет сообщение и выводит форму на страницу. Перейдем к функции с помощью которой мы сможем настроить наш виджет через админку.

Функция icq_widget_options () ($ OPTIONS = get_option ( 'icq_widget'), если (! is_array ($ ссылок)) $ OPTIONS = Array ( 'UIN' => '111111 ',' PASS '=> '111111', 'uin_rec' => '111111 ',
'строка' => '10 ',' COLS '=> '25'), если (Исеть ($ _POST [ 'UIN'])) ($ страницу [ 'UIN'] = strip_tags (stripslashes ($ _POST [ 'UIN '])); $ страницу [ 'проходить'] = strip_taОО (stripslashes ($ _POST [ 'проход'])); $ страницу [' uin_rec '] = strip_tags (stripslashes ($ _POST [' uin_rec'])); $ страницу [ 'COLS'] = strip_tags (stripslashes ($ _POST [ 'COLS'])); $ страницу [' строка '] = strip_tags (stripslashes ($ _POST [' строк'])); $ страницу [ 'widget_title'] =strip_tags (stripslashes ($ _POST [ 'widget_title'])); UPDATE_OPTION (' icq_widget ', $ опционы);) $ UIN = htmlspecialchars ($ страницу [' UIN '], ENT_QUOTES); $ пасс = htmlspecialchars ($ страницу [' PASS '], ENT_QUOTES); $ uin_rec = htmlspecialchars ($ страницу [' uin_rec '],ENT_QUOTES); $ рядов = htmlspecialchars ($ страницу [ 'строка'], ENT_QUOTES); $ COLS = htmlspecialchars ($ страницу [ 'COLS'], ENT_QUOTES); $ widget_title = htmlspecialchars ($ страницу [ 'widget_title'], ENT_QUOTES) ; <p эхо 'style="text-align:right;"> <F Labelили = "widget_title"> '. __ ( 'Widget заголовком'). '<Ввод стиль = "Ширина: 200px;" ID = "имя widget_title" = "Тип widget_title" = "Текст"
Значение ="'.$ widget_title. ' "/> </ Label> </ P>'; эхо '<P стиль =" Текст-ALIGN: права; "&GT; <label for="uin">. __ ( 'Номер, с которого отправляется сообщение "). '<input Style="width: 200px;" id="uin" name="uin" type="text" value="'.$uin.'" /> </ Label> </ P>'; Эхо ' <p style="text-align:right;"> <метка для = "пасс "> '. __ (' Пароль отправителю номер ').' <ввод стиль =" Ширина: 200px; "ID =" имя перевал "=" Тип перевал "=" Пароль "
Значение ="'.$ пасс. "/> </ Label> </ P> '; <p эхо' style="text-align:right;"> <метка для =" uin_НОЦ "> '. __ (' Номер ICQ сообщения ресивер ').' <ввод стиль =" Ширина: 200px; "ID =" имя uin_rec "=" Тип uin_rec "=" Текст "
Значение ="'.$ uin_rec. ' "/> </ Label> </ P>'; <p эхо 'style="text-align:right;"> <Labelза = "строка"> '. __ ( 'Количество строк в виде'). '<Ввод стиль = "Ширина: 200px;" ID = "имя ряды" = "строка" Type = "текст" строк значения ="'.$ ".
/> </ Label> </ P> '; <p эхо' style="text-align:right;"> <метка для ="COLS"> '. __ ( 'Количество COLS в форме'). '<Ввод стиль = "Ширина: 200px;" ID = "имя COLS" = "COLS типа" = "Текст" COLS значения ="'.$ ".
/> </ Label> </ P> ';)

Ну, а в этой функции все также просто, получаем настройки РГ функцией get_option, и если их нет, то есть плагин только установили, то забиваем в них значения по умолчанию, 111111, если есть, создаем ассоциативный массив и сохраняем его с помощью функции РГ UPDATE_OPTION которая в качестве параметра принимает название нстроек по которому мы потом их получаем и собственно ассоциативный массив с самими настройками. Далее просто выводим форму в которую будут вводиться настройки, заметь что здесь нет надобности создавать кнопку представить WP так как это все делает сам.

Далее собственно регистрруем виджет:

Функция register_icq_widget () (register_sidebar_widget (Array ( 'ICQ', 'Widgets'), 'icq_widget'); register_widget_control (Array ( 'ICQ', 'Widgets'), 'icq_widget_options', 500,
600);) add_action ( 'инициализации', 'Register_icq_widget');

Создаем функцию (для удобства) в которой регистрируем виджет и создаем возможность настройки его через админку. Первая функция в качестве параметров принимает идентификатор виджета и обратную функцию которая вызывается если виджет добавлен на страницу (наша первая функция), и вторая функция принимает теже параметры плюс размеры окошка для ввода настроек виджета.

После этой функции мы просо создаем событие Init (начало работы) и указываем что еще нужно запускать функцию которая регистрирует наш виджет, то есть при каждом визите Wordpress будет сначала запускать функцию register_icq_widget, которая в свою очередь будет добавлять наш виджет на сайдбар и в админку с помощью фнкций icq_widget и icq_widget_options. Собственно на этом все, по сути мы захватили ОЧЕНЬ малую часть функций которые нам предоставляет Wordpress, полный список смотрите тут. Удачи в разработке плагинов!

PS.: Полный листинг виджета:

Connect ($ UIN, $ PASS), если ($ ICQ-> IsConnected ()) (if ($ ICQ-> SendMessage ($ uin_rec, $ Text)) ($ ReSult = "Сообщение успешно отправлено!";) ($ другого результата = "Ошибка при отправке. Пожалуйста, повторите попытку позже.";) $ ICQ-> Disconnect ();) ($ другого результата = $ ICQ-> Error;)) Эхо $ before_widget; Эхо "<div id="icq_div">". before_title $. $ widget_title.$ after_title; Эхо "<form method="POST"> <Textarea COLS ="".$ COLS." "строк ="".$ строк." "
Name = "icq_text"> </ TEXTAREA> <input type="submit" value="отправить" /> <P стиль = "Размер шрифта: 0.9em; шрифт-CoLOR: # 333 ;">".$ результат ". </ P> </ FORM> </ div>"; Эхо $ after_widget;) функция icq_widget_options () ($ OPTIONS = get_option ( 'icq_widget'), если (! is_array ($ ссылок)) $ OPTIONS = Array ( 'UIN' => '111111 ',' PASS '=> '111111', 'uin_rEC '=> '111111',
'строка' => '10 ',' COLS '=> '25'), если (Исеть ($ _POST [ 'UIN'])) ($ страницу [ 'UIN'] = strip_tags (stripslashes ($ _POST [ 'UIN '])); $ страницу [ 'проходить'] = strip_tags (stripslashes ($ _POST [ 'проход'])); $ страницу [' uin_rec '] = Газа_tags (stripslashes ($ _POST [ 'uin_rec'])); $ страницу [' COLS '] = strip_tags (stripslashes ($ _POST [' COLS'])); $ страницу [ 'строка'] = strip_tags (stripslashes ($ _POST [ 'строк'])); $ страницу [' widget_title '] = strip_tags (stripslashes ($ _POST [' widget_title'])); update_optiо ( 'icq_widget', $ опционы);) $ UIN = htmlspecialchars ($ страницу [ 'UIN'], ENT_QUOTES); $ пасс = htmlspecialchars ($ страницу [ 'проходить'], ENT_QUOTES); $ uin_rec = htmlspecialchars ($ страницу [ 'uin_rec'], ENT_QUOTES); $ рядов = htmlspecialchars ($ страницу [ 'строка'], ENT_QUOTES); $ COLS = htmlspecialchars ($ страницу [ 'COLS'], ENT_QUOTES); $ widget_title = htmlspecialchars ($ страницу [ 'widget_title'], ENT_QUOTES); эхо '<p style="text-align:right;"> <label for="widget_title">. __ ( 'Widget заголовком').