Внутри плагина "Hello_Dolly"
Я хочу написать плагин, который добавляет в определенное место на странице случайно выбранную фразу и/или изображение.
В программировании, особенно новичку, часто полезно изучить готовый код, написанный опытным разработчиком, да и не очень-то рационально было бы каждый раз "изобретать велосипед". Для начала рассмотрим, как работает очень простой плагин "Hello_Dolly", поставляемый в составе WordPress в качестве примера плагина. (Этот плагин добавляет случайно выбранную фразу на страницу администрирования WordPress.)
Во-первых,
интересно, зачем в начале файла плагина перед
/* Plugin Name: ... Plugin URI: ... Description: ... Author: ... Version: ... Author URI: ... */
добавлено
/** * @package Hello_Dolly * @author Matt Mullenweg * @version 1.5.1 */
Это теги PHPDoc, генератора документации для php-кода. (Они используются, при генерации документации плагина, и их добавлять в код плагина, конечно же, необязательно.)
PHPDoc-комментарий начинается с /**. Каждая следующая строка должна начинаться с *. Закрывает PHPDoc-комментарий */.
Кстати, по поводу использования тегов встроенной документации в Кодексе WordPress (Inline Documentation) написано:
Для PHPdoc-блоков добавляется информация @since (когда был добавлен) (даже если эта информация пока недоступна), а в качестве информации @package всегда следует указывать "WordPress", если это не внешняя библиотека:
/**
* ... Описание
*
* @package WordPress
* @since 2.1 или {{@internal Unknown}}}
*
* ... Другая информация
*/
Блоки PHPdoc-комментариев не используются внутри блоков функций и методов за исключением @todo (что нужно сделать).
/** * @todo ... Описание */
или
/** @todo ... Описание*/
В общем, это интересная тема, но для другой статьи...
Во-вторых,
в плагине используются функции
wptexturize(...)
mt_rand(...) - функция PHP
add_action('admin_footer', 'hello_dolly');
add_action('admin_head', 'dolly_css');
get_bloginfo( 'text_direction' );
и в function dolly_css() задается стиль:
echo "
<style type='text/css'>
#dolly {
position: absolute;
top: 4.5em;
margin: 0;
padding: 0;
$x: 215px;
font-size: 11px;
}
</style>
";
}
С точки зрения создания плагина нас интересует функция WordPress add_action(). После изучения кода плагина понятно, что эта функция добавляет "в заданное место", точнее в заданный момент (момент загрузки 'admin_footer' и 'admin_head') результат заданной функции ('hello_dolly' и 'dolly_css').
Когда (куда) еще можно добавлять свой php-код?
Плагин может добавлять php-код с помощью хуков, в данном случае используется хук-действие (action hook).
Вот некоторые другие хуки-действия :
- init - WordPress загрузился, но заголовки еще не отправлены
- loop_start - перед обработкой первого поста цикла WordPress
- loop_end - после обработки последнего поста цикла WordPress
- get_footer - перед загрузкой файла шаблона footer.php
- wp_footer - в конце тега <body>. Можно использовать для добавления контента.
Еще хуки
[ref text="List of all WordPress hooks" url="http://adambrown.info/p/wp_hooks/hook"] (Список всех хуков WordPress )
В Кодексе:
[ref text="Plugin API/Hooks 2.0.x" url="http://codex.wordpress.org/Plugin_API/Hooks_2.0.x"] (Хуки-действия)
[ref text="Plugin API/Filter Reference" url="http://codex.wordpress.org/Plugin_API/Filter_Reference"] (Хуки-фильтры)
Добавление случайно выбранной фразы на страницу блога
<?php
/*
Plugin Name: Random Items
Plugin URI: http://wordpress.howtoo.ru/
Description: Adds a ramdom phrase on every page
Author: MBlogM
Version: 1
Author URI: http://wordpress.howtoo.ru/
*/
function get_phrase() {
/** Список фраз */
$phrases = "В Интернете кто-то неправ!
Блин! Я целый день работаю. С ума сойти.
Понедельник - день тяжёлый!
Понедельник. Начнем новую жизнь!
Сидим, как в деревне! Ни радио, ни телевизора - один Интернет остался!
Решил собраться с мыслями...ни одна мысль на собрание не пришла...
Может показаться, что я ничего не делаю, но на клеточном уровне я очень занят.
";
// Выделение отдельных строк
$phrases = explode("n", $phrases);
// Выбор случайной фразы
return wptexturize( $phrases[ mt_rand(0, count($phrases) - 1) ] );
}
// Добавление фразы на страницу
function add_phrase() {
$chosen = get_phrase();
echo "<p id='myphrase'>$chosen</p>";
}
// Привязка функции к действию wp_footer
add_action('wp_footer', 'add_phrase');
?>
Если все оставить так, как есть, фраза появляется в самом низу страницы, поэтому добавим позиционирование:
// Задание положения на странице
function phrase_css() {
echo "
<style type='text/css'>
#myphrase {
position: absolute;
top: 7.5em;
margin: 10;
padding: 10;
right: 70px;
font-size: 12px;
font-color: white;
}
</style>
";
}
add_action('wp_head', 'phrase_css');
Теперь случайно выбранная фраза находится справа в шапке страницы.
Конечно, такой плагин мало интересен. Фразы желательно хранить в базе данных или, хотя бы, в отдельном файле, чтобы можно было добавлять новые фразы, не открывая код плагина.
В общем, следующие шаги - это
(1) запись и извлечение фраз из базы данных:
Создание плагина: запись в базу данных
и
(2) написание формы для добавления фраз и изменения опций плагина на панели администрирования.
Ай спасибо))) Только начал копаться в вордпрессе и вот как раз вопрос такого плана интересовал)