Когда (куда) можно добавлять свой php-код с помощью плагина?
Разбор плагина "Hello_Dolly" и создание плагина, который добавляет на страницу блога случайно выбранную фразу (хук add_action).
В этой статье:
Внутри плагина "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>. Можно использовать для добавления контента.
Еще хуки
В Кодексе:
Добавление случайно выбранной фразы на страницу блога
<?php /* Plugin Name: Random Items Plugin URI: //mblogm.ru/ Description: Adds a ramdom phrase on every page Author: MBlogM Version: 1 Author URI: //mblogm.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) написание формы для добавления фраз и изменения опций плагина на панели администрирования.
Ай спасибо))) Только начал копаться в вордпрессе и вот как раз вопрос такого плана интересовал)