Строго говоря, плагин должен обладать лишь основным 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(), однако такой подход потребует дополнительного написания кода.