Всея ПЫХА epsyl adw0rd Мавр ГО Irinax http://hell.helldude.ru - это пиздец

WordPress Plugins. Попробуем его на вкус

Рубрики: (wordpress) Автор: phpdude 14-07-2009

Теги : , , , , ,

Добрый день, с вами говорит автоответчик.

захотелось мне попробовать написать вордпресс виджет! Долго искал тип инсталляшки такой как ВИДЖЕТ! и хрен :) оказывается виджеты добавляются плагинами, ну в системе в которой вся структура – метод хендлеров это адекватно я думаю.

значит надо научиться писать плагин :)

Поехали!

начну с того, что скажу что я не люблю когда плагин валяется просто файлом в папке плагинов, я люблю папку :) поэтому создадим папочку wp-content/plugins/dude-test/

а в ней файлик с одноименным названием – dude-test.php

смотрим в админку … нет плагина? :) это да, потому что необходимо заполнить метаинформацию о плагине. я много чего придумывал в этой жизни, но пожалуй впервые в вордпрессе заметил что метаинформацию они пишут в МНОГОСТРОЧНЫХ КОММЕНТАРИЯХ .. с одной стороны этопиздец с другой стороны это нормально …ладно, напишем там шапочку

<?php
/*
Plugin Name: dudeTest Widject plugin
Plugin URI: http://hell.helldude.ru/
Description: phpdude Test widget plugin
Author: phpdude
Version: 1
Author URI: http://helldude.ru/
*/

Шикарно! Теперь если обновить страничку с плагинами в админке нашего вордпресса, мы видим что он там появился и его можно активировать :)

Давайте поиграемся с этой штукой :)
впишем в файл после шапки die(‘Yeah’); чтоли. активируем плагин и о боже)) видим слово еах! круто наш плагин фурычит.

как дальше воркать будем.

читаем хав то старты и ексамплесы, оттуда понимаем что писать как мы нам не советуют, а советуют как на яваскрипте писать, то есть надо бы поставить инциализацию нашего плагина на момент plugins_loaded, приступаем

function dude_init() {
die(‘yeah!’);
}

add_action(«plugins_loaded»,»dude_init»);

и осталось както проверить что у нас и правда наступил этот момент. не будем придумывать сложности, пройдемся так – просто посмотрим на список инклуженых файлов.

в первом случае это так

print_r(get_included_files());
die();

А во втором вот так

function dude_init() {
print_r(get_included_files());
die();
}

add_action(«plugins_loaded»,»dude_init»);

НУ и смотрим что получается

В первом случае это

Array
(
[0] => /www/wordpress/wp-admin/plugins.php
[1] => /www/wordpress/wp-admin/admin.php
[2] => /www/wordpress/wp-load.php
[3] => /www/wordpress/wp-config.php
[4] => /www/wordpress/wp-settings.php
[5] => /www/wordpress/wp-includes/compat.php
[6] => /www/wordpress/wp-includes/functions.php
[7] => /www/wordpress/wp-includes/classes.php
[8] => /www/wordpress/wp-includes/wp-db.php
[9] => /www/wordpress/wp-includes/cache.php
[10] => /www/wordpress/wp-includes/plugin.php
[11] => /www/wordpress/wp-includes/default-filters.php
[12] => /www/wordpress/wp-includes/pomo/mo.php
[13] => /www/wordpress/wp-includes/pomo/translations.php
[14] => /www/wordpress/wp-includes/pomo/entry.php
[15] => /www/wordpress/wp-includes/pomo/streams.php
[16] => /www/wordpress/wp-includes/l10n.php
[17] => /www/wordpress/wp-includes/formatting.php
[18] => /www/wordpress/wp-includes/capabilities.php
[19] => /www/wordpress/wp-includes/query.php
[20] => /www/wordpress/wp-includes/theme.php
[21] => /www/wordpress/wp-includes/user.php
[22] => /www/wordpress/wp-includes/general-template.php
[23] => /www/wordpress/wp-includes/link-template.php
[24] => /www/wordpress/wp-includes/author-template.php
[25] => /www/wordpress/wp-includes/post.php
[26] => /www/wordpress/wp-includes/post-template.php
[27] => /www/wordpress/wp-includes/category.php
[28] => /www/wordpress/wp-includes/category-template.php
[29] => /www/wordpress/wp-includes/comment.php
[30] => /www/wordpress/wp-includes/comment-template.php
[31] => /www/wordpress/wp-includes/rewrite.php
[32] => /www/wordpress/wp-includes/feed.php
[33] => /www/wordpress/wp-includes/bookmark.php
[34] => /www/wordpress/wp-includes/bookmark-template.php
[35] => /www/wordpress/wp-includes/kses.php
[36] => /www/wordpress/wp-includes/cron.php
[37] => /www/wordpress/wp-includes/version.php
[38] => /www/wordpress/wp-includes/deprecated.php
[39] => /www/wordpress/wp-includes/script-loader.php
[40] => /www/wordpress/wp-includes/class.wp-dependencies.php
[41] => /www/wordpress/wp-includes/class.wp-scripts.php
[42] => /www/wordpress/wp-includes/functions.wp-scripts.php
[43] => /www/wordpress/wp-includes/class.wp-styles.php
[44] => /www/wordpress/wp-includes/functions.wp-styles.php
[45] => /www/wordpress/wp-includes/taxonomy.php
[46] => /www/wordpress/wp-includes/update.php
[47] => /www/wordpress/wp-includes/canonical.php
[48] => /www/wordpress/wp-includes/shortcodes.php
[49] => /www/wordpress/wp-includes/media.php
[50] => /www/wordpress/wp-includes/http.php
[51] => /www/wordpress/wp-includes/widgets.php
[52] => /www/wordpress/wp-includes/vars.php
[53] => /www/wordpress/wp-content/plugins/jobpoll/jobpoll.php
)

а во втором случае

Array
(
[0] => /www/wordpress/wp-admin/plugins.php
[1] => /www/wordpress/wp-admin/admin.php
[2] => /www/wordpress/wp-load.php
[3] => /www/wordpress/wp-config.php
[4] => /www/wordpress/wp-settings.php
[5] => /www/wordpress/wp-includes/compat.php
[6] => /www/wordpress/wp-includes/functions.php
[7] => /www/wordpress/wp-includes/classes.php
[8] => /www/wordpress/wp-includes/wp-db.php
[9] => /www/wordpress/wp-includes/cache.php
[10] => /www/wordpress/wp-includes/plugin.php
[11] => /www/wordpress/wp-includes/default-filters.php
[12] => /www/wordpress/wp-includes/pomo/mo.php
[13] => /www/wordpress/wp-includes/pomo/translations.php
[14] => /www/wordpress/wp-includes/pomo/entry.php
[15] => /www/wordpress/wp-includes/pomo/streams.php
[16] => /www/wordpress/wp-includes/l10n.php
[17] => /www/wordpress/wp-includes/formatting.php
[18] => /www/wordpress/wp-includes/capabilities.php
[19] => /www/wordpress/wp-includes/query.php
[20] => /www/wordpress/wp-includes/theme.php
[21] => /www/wordpress/wp-includes/user.php
[22] => /www/wordpress/wp-includes/general-template.php
[23] => /www/wordpress/wp-includes/link-template.php
[24] => /www/wordpress/wp-includes/author-template.php
[25] => /www/wordpress/wp-includes/post.php
[26] => /www/wordpress/wp-includes/post-template.php
[27] => /www/wordpress/wp-includes/category.php
[28] => /www/wordpress/wp-includes/category-template.php
[29] => /www/wordpress/wp-includes/comment.php
[30] => /www/wordpress/wp-includes/comment-template.php
[31] => /www/wordpress/wp-includes/rewrite.php
[32] => /www/wordpress/wp-includes/feed.php
[33] => /www/wordpress/wp-includes/bookmark.php
[34] => /www/wordpress/wp-includes/bookmark-template.php
[35] => /www/wordpress/wp-includes/kses.php
[36] => /www/wordpress/wp-includes/cron.php
[37] => /www/wordpress/wp-includes/version.php
[38] => /www/wordpress/wp-includes/deprecated.php
[39] => /www/wordpress/wp-includes/script-loader.php
[40] => /www/wordpress/wp-includes/class.wp-dependencies.php
[41] => /www/wordpress/wp-includes/class.wp-scripts.php
[42] => /www/wordpress/wp-includes/functions.wp-scripts.php
[43] => /www/wordpress/wp-includes/class.wp-styles.php
[44] => /www/wordpress/wp-includes/functions.wp-styles.php
[45] => /www/wordpress/wp-includes/taxonomy.php
[46] => /www/wordpress/wp-includes/update.php
[47] => /www/wordpress/wp-includes/canonical.php
[48] => /www/wordpress/wp-includes/shortcodes.php
[49] => /www/wordpress/wp-includes/media.php
[50] => /www/wordpress/wp-includes/http.php
[51] => /www/wordpress/wp-includes/widgets.php
[52] => /www/wordpress/wp-includes/vars.php
[53] => /www/wordpress/wp-content/plugins/jobpoll/jobpoll.php
[54] => /www/wordpress/wp-includes/pluggable.php
[55] => /www/wordpress/wp-includes/default-widgets.php
)

видим 2 разные строчки? :) думаю что айс.

теперь мы поняли как правильно проводить инициализацию нашего плагина дабы не напороться на «object not found exception» ну и «logic exception»(в вашей голове конечно).

далее мы можем посмотреть вот сюда

http://codex.wordpress.org/Plugin_API

и вот сюда http://codex.wordpress.org/Plugin_API/Filter_Reference

у меня же задача проще :) ) надо сделать небольшой виджет.

на этой строчке я задумался «будет ли это ктото читать … ладно допишем уж».

Добавить свой виджет в систему просто – просто надо его заргистрировать через функцию register_sidebar_widget итого

function dude_init() {
register_sidebar_widget(«Dude widget», «dude_widget»);
}

function dude_widget() {

}

add_action(«plugins_loaded»,»dude_init»);

круто!
как выглядит мой виджет :)

шикарно, не правда ли? :)
казалось бы круто, да не так как я думал … вордпрессовцы не стоят на месте и туториал по которому я это наговнокодил видимо уже устарел, смотрит в файлы вордпресса, я решил глянуть в default-widgets.php и что? ДА! там используется не функция(идиотизм) а класс для работы с виджетом. а на офф сайте сразу оговроюсь я не нашел нормальной документации по виджетам, да и вообще ее там не нашел …

сущеуствует функция register_widget, которй надо передавать имя класс которое является потомком от WP_Widget итого
register_widget(‘WP_Widget_Pages’);

поехали :) )
поковыряв исходный класс я понял что существуют функции, которые можно переопределить
вот картиночка с ними

widget

простите за говенное качество фотки, но благодарить надо мспайнт.

А знаете зачем я полез дальше рыться? я банально не понял как одна функция будет все обрабатывать: настройки виджета, его отображение, да епт даже дескрипшн отдавать из функции както ебано, не будет эе эта функция возвращать некий объект/массив, это глупо. Поэтому я стал рыть дальше :) и наткнулся на видимо «new wave widgets», странно почему сначала не были использованы классы.

поехали!

function dude_init() {
register_widget(«WP_Widget_DudeWidget»);

do_action(‘widgets_init’);
}

class WP_Widget_DudeWidget extends WP_Widget {
function WP_Widget_DudeWidget()
{
$opts = array();
$opts['description'] = «Dude mega description»;

$this->WP_Widget(__CLASS__, «Dude Widget», $opts);
}
}

add_action(«init»,«dude_init»);
для умных и глазастых скажу, что да! пришлось сменить акшн на «init» и дополнительно вызвать екшн «init_widgets».

теперь все шикарно.
получилось =))

шикарненько, неправда ли? :)

ну и дальше можно переписывая предопределенные функции сделать свой ДОСТОЙНЫЙ виджет :)

вот функции, которые необходимо переписать чтобы наш виджет стал полноценным.

  • widget
  • update
  • form

Ну вот :) )) вам удачного виджеточтения, а мне виджетописания :)

удачи! привет типочкам с ПЫХА.РУ!

Комментарии RSS тут:

Всего отзывов: 5 на WordPress Plugins. Попробуем его на вкус

Оставьте свой отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

О САЙТЕ

Крик души может быть будет на этом сайте, а может и будет что-нибудь другое :)