Обязательная функциональность плагинов в WordPress

Дата публикации:Сентябрь 9, 2010

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

Поделиться

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.