Строго говоря, плагин должен обладать лишь основным PHP-файлом, в котором обычно содержится заголовок и необходимый код. Однако, на практике такое встречается довольно редко. Работа с плагином должна быть простой и доступной обычным пользователям, что достигается использованием различных дополнительных компонентов, позволяющих, к примеру, вывести настройки плагина в панель управления WordPress.
Некоторые плагины создаются для добавления разнообразных визуальных возможностей, которые, строго говоря, должны работать с любыми темами. В этом кроется значительная проблема для всех разработчиков: обычно они создают плагин, основываясь на одном конкретном проекте, не задумываясь о том, как это будет выглядеть в других темах. То же самое относится и к локализации плагина.
Вообще, любой плагин должен поставляться с файлом лицензии и инструкциями относительно его работы. Инструкции могут быть как вшиты в сам плагин, так и выведены в отдельный файл readme. Первый путь является более предпочтительным, поскольку лишь малый процент пользователей обычно заглядывает в текстовый файл.
Настройки плагина
Иногда вам понадобится внести какую-либо информацию в базу данных. В этом вопросе разработчик имеет относительную свободу — он может создать собственную таблицу, изменить значения любых полей базы данных, словом, может делать то, что ему придет в голову. В данном разделе мы рассмотрим базу данных с настройками WordPress и научимся добавлять в нее небольшие участки кода.
Насколько вы помните, за настройки WordPress отвечает таблица wp_options базы данных. Ни в коем случае не перегружайте этот файл различной информацией, иначе время загрузки сайта значительно сократится.
Рассматривать процесс работы с wp_options мы будем на примере простого плагина Footer Notes. Он отвечает за создание отдельной страницы в панели администратора, позволяющей сохранять различный HTML-код, который будет добавлен в конец каждой записи (при помощи определенного в плагине тэга шаблона). Также плагин позволяет добавлять HTML-код в конец записей, находящихся в RSS фиде. Интерфейс страницы настроек плагина состоит из двух текстовых полей, предназначенных для ввода HTML-кода, а также кнопки Save, сохраняющей изменения. Ниже приведен исходный код плагина:
<?php
/*
Plugin Name: Footer Notes
Plugin URI: http://notesblog.com/footer-notes/
Description: Footer Notes adds a simple code block to your posts and feeds.
Version: 0.1
Author: Thord Daniel Hedengren
Author URI: http://tdhedengren.com
*/
// add menu to admin --
if (is_admin()){
add_action('admin_menu', 'nb_footernotes_menu');
add_action('admin_init', 'nb_footernotes_register');
}
// whitelist options --
function nb_footernotes_register() {
register_setting('nb_footernotes_optiongroup', 'nbfn_post');
register_setting('nb_footernotes_optiongroup', 'nbfn_feed');
}
// admin menu page details --
function nb_footernotes_menu() {
add_options_page('Footer Notes Settings', 'Footer Notes', 8, 'nb_footernotes', 'nb_footernotes_
options');
}
// add actual menu page --
function nb_footernotes_options() { ?>
<div>
<div id="icon-options-general"><br /></div>
<h2>Footer Notes</h2>
<p>This is the settings page for the <a href="http://notesblog.com/footer-notes/">Footer
Notes</a> plugin. This plugin adds HTML code at the bottom of your posts and your feed items.
Just add the HTML code you want for the two possible spots.</p>
<p>Leave either of these <strong>completely empty</strong> if you do not want to return
anything!</p>
<form method="post" action="options.php">
<?php settings_fi elds('nb_footernotes_optiongroup'); ?>
<table style="margin-top: 20px; padding-bottom: 10px; border: 1px dotted
#bbb; border-width:1px 0;">
<tr valign="top">
<th scope="row">
<h3 style="margin-top: 10px;">Code to be added after posts</h3>
<p>The code below will be added where you put the <code>nb_footernotes()
</code> template tag in your theme, on a per-post basis. It needs to be within the loop.</p>
</th>
</tr>
<tr>
<td><textarea name="nbfn_post" style="width: 90%; height: 150px; padding:
10px;"><?php echo get_option('nbfn_post'); ?></textarea></td>
</tr><tr valign="top">
<th scope="row">
<h3 style="margin-top: 10px;">Code to be added after feed items</h3>
<p>The code below will be added at the bottom of each item in your feeds.</p>
</th>
</tr><tr>
<td><textarea name="nbfn_feed" style="width: 90%; height: 150px; padding:
10px;"><?php echo get_option('nbfn_feed'); ?></textarea></td>
</tr>
</table>
<p>
<input type="submit" value="Save Changes" />
</p>
</form>
</div>
<?php }
// custom hook for the posts --
function nb_footernotes() {
do_action('nb_footernotes');
}
// and now for the post output --
add_action('nb_footernotes', 'nb_footernotes_post_output');
function nb_footernotes_post_output() {
echo get_option('nbfn_post');
}
// feed output time --
function nb_footernotes_rss() {
echo get_option('nbfn_feed');
}
// feed fi lters --
add_fi lter('the_excerpt_rss', 'nb_footernotes_rss');
add_fi lter('the_content_rss', 'nb_footernotes_rss');
// that's it! -- FIN//
?>
Также в состав плагина входят текстовые файлы license.txt и readme.txt, в которых содержатся соответственно лицензия и основная информация относительно использования плагина, а также PHP-файл uninstall.php, служащий для очистки базы данных от внесенных изменений.
В самом начале файла плагина находится заголовок, содержащий описание плагина. Далее следует добавление нового пункта меню к панели администратора и вызов основных функций. После функций следует задание страницы настроек, и, наконец, в самом конце находятся основные хуки и фильтры.
В том случае, если пользователь решит деактивировать плагин, все изменения, внесенные в базу данных, будут удалены. Для того чтобы удалить поле my-data из таблицы option базы данных, используется команда:
delete_option('my-data');
Файл uninstall.php плагина Footer Notes содержит следующий участок кода:
<?php
// for old versions --
if ( !defined('WP_UNINSTALL_PLUGIN') ) {
exit();
}
// delete the option data --
delete_option('nbfn_post');
delete_option('nbfn_feed');
?>
В нем определяется удаление полей nbfn_post и nbfn_feed из таблицы option базы данных. Естественно, то же самое действие можно выполнить и без помощи uninstall.php, опираясь на хук register_uninstall_hook(), однако такой подход потребует дополнительного написания кода.
Связанные материалы:


