Содержание


Создание плагина для WordPress

Comments

WordPress CMS - это удобная платформа для разработки Web-сайтов, пользующаяся большой популярностью среди программистов и Интернет-пользователей. Но, к сожалению, ее базовая функциональность ограничена и может предложить разработчику только стандартный набор опций. Поэтому для расширения возможностей WordPress используются специальные модули (плагины), которые позволяют модифицировать базовую систему для создания Web-сайтов, отвечающих специфических требованиям проекта.

Плагин для WordPress – это небольшая программа, которая устанавливается в систему в виде отдельного блока и помогает расширить ее возможности. Проще говоря, это дополнение к базовой программе, целью которого является улучшение функциональности Web-сайта или внедрение дополнительных возможностей. Основным преимуществом плагинов является то, что при их внедрении не требуется вносить изменения в базовую программу. Кроме того, при обновлении базовой системы плагины не будут затронуты и продолжат функционировать в прежнем режиме.

В данной статье мы рассмотрим процесс создания плагинов для WordPress и несколько важных аспектов, которые нужно учитывать при разработке собственных плагинов. Для создания собственного плагина для WordPress потребуется выполнить следующие действия:

  1. присвоить плагину уникальное название;
  2. создать отдельный каталог для размещения плагина;
  3. в этом каталоге организовать определённую файловую структуру для хранения PHP-файлов и других файлов плагина;
  4. создать основной файл для плагина;
  5. создать файл readme.txt;
  6. реализовать функции распознавания путей к различным файлам;
  7. создать дополнительные PHP-файлы и подключить их к главному файлу плагина;
  8. создать функции активации/деактивации плагина;
  9. прописать PHP-сценарий для удаления плагина.

Название и файловая структура плагина

Плагин для WordPress должен иметь уникальное название, чтобы избежать возникновения конфликтов с другими плагинами, уже установленными в системе, или её ядром. Многие пользователи придают уникальность названию путем добавления префиксов или инициалов. Например, плагин должен носить название HelloWorldPlugin. Тогда будет достаточно просто добавить префикс MSP (от MySuperPrefix), чтобы, в итоге, получить уникальное имя MSPHelloWorldPlugin. Для проверки можно попытаться найти плагин с таким именем в списке плагинов, уже доступных для WordPress.

Плагин должен располагаться в специально созданном для него каталоге внутри глобального каталога, используемого для хранения плагинов. При этом имя каталога должно совпадать с названием плагина. В нашем примере будет создан каталог msp-helloworld, поэтому в каталоге обязательно должен быть размещен главный файл плагина с идентичным названием msp-helloworld.php.

В случае если впоследствии планируется выложить плагин в хранилище, дополнительно необходимо будет создать файл readme.txt, в котором будет содержаться вся необходимая информация о плагине.

Если же в плагине будут использоваться различные картинки, Java Script или css-файлы, то в основном каталоге плагина следует создать подкаталоги для их хранения. В итоге должна получиться примерно следующая структура каталогов для размещения плагина, как показано на рисунке 1.

Рисунок 1. Файловая структура для хранения плагина
Файловая структура для хранения плагина
Файловая структура для хранения плагина

В начале основного файла плагина обязательно должен располагаться заголовок – PHP-комментарий в обязательной кодировке UTF-8. Это необходимо для того, чтобы система WordPress могла распознать плагин и вывести информацию о нём, например, название, описание, версию, автора и т.д. Количество комментариев при этом может быть неограниченно. На рисунке 2 показан пример вывода информации о плагине на странице управления в WordPress.

Рисунок 2. Информация о плагине
Информация о плагине
Информация о плагине

Очень важно, чтобы WordPress могла правильно определить путь к дополнительным файлам, используемым в плагине. Так как каталог wp-content можно переносить, то определение пути к нему должно выполняться автоматически, независимо от места фактического расположения каталога.

Для этих целей можно использовать функции WordPress: plugin_dir_path и plugin_dir_url. Обе эти функции помогают распознать путь к каталогу плагина, расположенному внутри основного каталога WordPress и создают константы, содержащие информацию о месте расположения плагина. В дальнейшем можно использовать данные константы вместе с относительными путями к различным каталогам, содержащим дополнительные файлы плагина. Кроме того, использование этих констант позволит подключить нужные файлы в основном PHP-файле.

Возможные состояния плагина

После установки плагина следует сразу проверить его состояние, так как он может находиться как в активированном, так и в деактивированном состоянии. Если плагин находится в активированном состоянии, то каждый раз при загрузке страницы WordPress будет его выполнять. Если же плагин деактивирован, то при загрузке страницы он, соответственно, исполняться не будет.

WordPress следит за состоянием плагина и вызывает его функциональность в зависимости от текущего состояния. Например, если какой-либо код предназначен для исполнения только в момент активации/деактивации плагина, то он будет вызываться только при срабатывании данного события, а не при обновлении или загрузке страницы. Изменение состояния плагина выполняется путём удаления его настроек, хранящихся в базе данных.

Существуют так называемые хуки активации (activationhook) и деактивации (deactivationhook), с помощью которых мы сообщаем WordPress, в каком случае должна быть вызвана та или иная функция плагина. Сначала следует зарегистрировать хуки, а затем прописать действия, которые должны выполняться плагином для WordPress при наступлении того или иного события.

Также стоит рассмотреть, как происходит удаление плагинов из WordPress. Чтобы удалить плагин для WordPress, следует удалить из общего каталога плагинов все файлы, относящиеся к нему. Существуют два способа сделать это:

  1. необходимо поместить файл uninstall.php в основном каталоге плагина (где располагаются его главный файл и файл readme.txt) и прописать в нем нужный код, тогда при удалении плагина WordPress автоматически выполнит его файл uninstall.php.
  2. можно воспользоваться хуком uninstallhookin, его следует зарегистрировать и прописать действия, которые должны быть выполнены при удалении плагина.

Стоит учитывать, что система удаления плагинов в WordPress построена так, что будет использоваться только один из вышеуказанных способов. Поэтому если в плагине уже имеется файл uninstall.php, и при этом также зарегистрирован хук uninstallhookin, то при удалении плагина будет вызван только файл, а хук использоваться не будет.

Теперь, когда мы рассмотрели базовые принципы функционирования плагинов, можно переходить к рассмотрению более сложных вопросов. Ключевыми компонентами любого плагина для WordPress являются хуки (hooks), и связанные с ними фильтры (filters) и действия (actions.). Рассмотрим каждое из этих понятий в отдельности.

Система хуков

Хук (от англ. hook – крючок) – это тот инструмент, с помощью которого можно модифицировать стандартную функциональность WordPress. Иными словами, это пользовательские функции, привязанные к конкретным системным функциям WordPress. Все существующие хуки занесены в так называемый "кодекс" WordPress. Существует два типа хуков:

  1. actionhook –хук, который отмечает место в коде, отвечающее за выполнение кода в момент конкретного действия (например, внесение каких-либо данных и сохранение их в базу);
  2. filterhook – отмечает фильтр, отвечающий за изменение значений (переменных), и в дальнейшем система будет использовать уже измененное значение;

Система WordPress изначально содержит некоторое количество хуков, но можно добавлять дополнительные хуки, чтобы создавать собственные рубрики, блоги, посты и т.д. Создание хуков – это один из этапов в процессе создания собственного плагина в WordPress, с помощью которого мы можем управлять системой и адаптировать её под требования конкретного проекта.

Для начала рассмотрим принцип работы с действиями (actions):

  1. при помощи хука actionhook, в котором предварительно были прописаны нужные параметры, отметить то место, где должно выполняться действие;
  2. используя параметры хука, прописать функцию, которая будет отвечать за выполнение необходимых действий;
  3. зарегистрировать действие, которое должно быть выполнено в момент срабатывания хука.
  4. в итоге, при загрузке страницы WordPress находит хук, после чего выполняются объявленные в нём действия.

Рассмотрим этот процесс более подробно. Чтобы выполнить первый пункт используется хук do_action

do_action($tag, $arg_1, $arg_2, ... , $arg_n);

где $tag – это название хука, $arg_1, $arg_2, ... , $arg_n – это параметры, с которыми будет активирована функция. При этом количество аргументов может варьироваться от 0 до бесконечности.

Следующим шагом является регистрация функции при помощи вызова add_action. Данная функция обязательно должна содержать в себе следующие параметры:

  1. наименование хука ($tag);
  2. название функции, которую необходимо активировать ($function_to_add).

Все остальные параметры являются дополнительными и могут быть прописаны в зависимости от требований разработчика (например, порядок исполнения функции $priority или принимаемое функцией количество аргументов $accepted_args_number).

Чтобы лучше изучить процесс, рассмотрим практический пример. Например, нам требуется, чтобы в нижней части сайта появилось небольшое уведомление. Сначала следует создать функцию вывода строки оповещения и зарегистрировать ее. Для регистрации мы используем хук wp-footer, поскольку он является неотъемлемой частью в использовании любой темы. Как только данный код будет добавлен в файл плагина для WordPress, на странице появится требуемый результат.

Рисунок 3. Плагин WordPress для вывода оповещения внизу страницы
Плагин WordPress для вывода оповещения внизу страницы
Плагин WordPress для вывода оповещения внизу страницы

Работа с фильтрами

Теперь рассмотрим, как можно использовать фильтры (filterhook), которые во многом похожи на действия (actionhook) из предыдущего раздела. Разница заключается лишь в том, что фильтры перед применением могут изменять значения переменных, переданные им хуком. Так, в функцию apply_filter, которая используется для создания хука фильтра, помимо наименования хука ($tag) необходимо передать такой параметр, как $value_to_filter. При этом данный параметр может оставаться незаполненным, но он обязательно должен быть обозначен. Все остальные аргументы являются необязательными и используются так же, как и в случае с хуками действия.

Фильтр должен содержать в себе как минимум один аргумент и возвращать измененное значение (return $value_to_filter).

Также существует функция add_filter, с помощью которой происходит регистрация функции с наименованием, которое содержится в $function_to_add для хука $tag.

Рассмотрим функцию the_content, которая выводит содержимое записи. В ней можно найти следующий хук, с помощью которого можно легко добавить какой-либо текст в конец поста.

$content = apply_filters('the_content', $content);

По завершении всех вышеуказанных действий, а также после активации плагина, должен получиться результат, как на рисунке 4.

Рисунок 4. Плагин WordPress для вывода текста в конец поста
Плагин WordPress для вывода текста в конец поста
Плагин WordPress для вывода текста в конец поста

Дополнительные действия с хуками

Какие ещё действия можно выполнять с хуками, помимо создания и установки?

Можно удалить определённое действие, относящееся к хуку, с помощью функции remove_action. При этом необходимо указать приоритетность и количество аргументов точно так, как это было обозначено при регистрации хука.

Чтобы удалить все действия, привязанные к хуку, используется функция remove_all_actions. В данном случае, если явно не указать приоритет, то функция удалит абсолютно все действия.

Данные способы также могут быть применены и по отношению к фильтрам. Единственное отличие в удалении хуков действий и фильтров заключается в разных наименованиях функций: action меняется на filter (т.е. вместо remove_action будет remove_filter).

Можно проверить регистрацию функции для хука, чтобы определить, зарегистрирована ли эта функция для конкретного хука или нет. Для этого используются функции has_action или has_filter. Если функция зарегистрирована, система вернёт результат true, если не зарегистрирована – результат false.

Более того, внутри самой функции тоже можно проверить факт вызова:

if('hook_to_check_name' === current_filter()){}.

Функция current_filter, несмотря на свое название, может применяться как по отношению к фильтрам, так и по отношению к действиям.

Options API

Вся информация о плагине для WordPress заносится в базу данных Options API (API для работы с параметрами), которая упрощает процесс создания, получения, обновления и удаления любых параметров. Более того, API WordPress гарантирует, что пользователи смогут обращаться к данным только корректными способами.

Все настройки Options API хранятся в таблице wp_options, при этом конкретным опциям присваиваются определенные имена. Существуют две наиболее важные функции для работы с опциями:

  • get_option - извлекает из базы данных информацию, хранящуюся под определенным именем;
  • update_option - служит для обновления в базе данных записи, привязанной к определенному имени (в случае отсутствия данной записи, она создается автоматически).

Эти функции можно использовать как по отношению к единичному аргументу, так и к массивам, благодаря чему под одним конкретным именем можно хранить целый массив данных. Подобная возможность может оказаться очень полезной при разработке плагина, так как различные параметры смогут храниться под общим именем.

Страница настроек плагина

Чтобы проще ориентироваться среди настроек плагина для WordPress, можно создать для него отдельную страницу или сразу несколько страниц, которые будут размещены в административном интерфейсе. Если для управления настройками плагина будет использоваться только одна страница, то ее можно разместить в уже существующем меню – как правило, оно носит название "Settings" (Настройки), при этом в параметре $parent_slug необходимо указать options-general.php. Также существуют функции, которые позволяют зарегистрировать несколько страниц с привязкой к определенному меню (например, add_options_page).

Что касается создания группы страниц, то тут необходимо учесть следующие правила:

  • сначала требуется обозначить главную страницу при помощи функции add_menu_page;
  • потом добавить дополнительные страницы при помощи функции add_submenu_page;
  • при добавлении дополнительных страниц обязательно нужно сделать ссылку на ID главной страницы через параметр $parent_slug.

Settings API

Функциональность Settings API (API для работы с настройками) используется для создания графического интерфейса для изменения настроек плагина. Сначала необходимо зарегистрировать конфигурационный параметр, чтобы получить возможность управлять вводом значений для него. Затем следует создать секцию и поле ввода для этого параметра, как показано ниже:

<?phpregister_setting($option_group, $option_name, $sanitise_callback); ?>
<?phpadd_settings_section( $id, $title, $callback, $page ); ?>
<?phpadd_settings_field( $id, $title, $callback, $page, $section, $args ); ?>

Следует помнить, что API позволяет указывать пользователей, которые смогут работать с этой настройкой. После завершения процесса регистрации параметр можно вывести на соответствующую страницу с помощью функции, которая располагается внутри тега <form>:

<?phpsettings_fields($option_group); ?>
<?phpdo_settings_sections($page); ?>

Функция settings_fields раскрывает скрытые поля формы, к которым WordPress обращается в процессе работы. Функция do_settings_sections служит для вывода ранее зарегистрированных полей и секций.

Дополнительную информацию по различным вопросам использования Settings API можно найти в "кодексе" WordPress.

Безопасность

Перед обработкой данных, отправленных пользователем на сервер, необходимо предварительно проверить их на соответствие заданному формату и на наличие скрытого вредоносного кода. Предварительная проверка входных данных – это одно из основных правил безопасности при работе с данными и настройками пользователей. То же самое относится и к данным, которые необходимо извлечь из базы (например, преобразовать HTML-символы для их нормального отображения). Для выполнения подобных задач в WordPress существуют специальные функции.

Другим немаловажным аспектом безопасности является контроль уровня привилегий пользователей. Платформа WordPress предлагает определенные механизмы, которые позволяют управлять правами доступа пользователей. Например, возможность разрешать или блокировать доступ к определенным действиям. Для этого при создании страницы для управления настройками следует присвоить ей определенный уровень доступа (как правило, это manage_options), что ограничит доступ к ней для пользователей, которые не обладают соответствующими полномочиями.

Создание собственного плагина

Итак, мы рассмотрели базовые действия, которые необходимо выполнить в процессе создания плагина для WordPress. Теперь пора собрать всю информацию и создать собственный плагин WordPress, который будет выводить в конце каждого поста информации об авторе. Но для большей сложности попробуем сделать так, чтобы пользователь мог менять шаблон блока, в котором выводится информация.

Наш плагин для WordPress будет содержать такие файлы, как core.php с вспомогательной функциональностью и admin.php с кодом для административного интерфейса.

Начнем создавать страницу настроек плагина с помощью admin.php (этот файл можно найти в архиве plugin.zip в разделе "Материалы для скачивания"). Для этой цели нужно использовать функцию msp_helloworld_admin_menu_setup, которая отвечает за создание страницы-подпункта меню и должна выполняться в хуке admin_menu.

После этого следует создать форму для редактирования настроек, то есть прописать их в функции msp_helloworld_admin_page_screen. При этом необходимо учитывать, что для корректной работы с настройками тег <form> должен ссылаться на файл options.php. В конце функция msp_helloworld_settings_link должна создать ссылку со страницы управления плагинами на страницу с настройками, как показано на рисунке 5.

Рисунок 5. Страница для управления плагинами
Страница для управления плагинами
Страница для управления плагинами

Все без исключения настройки плагина для WordPress должны храниться в едином массиве. Даже если имеется всего одна функция, она также должна быть включена в массив. Для того чтобы занести все настройки в массив, используем функцию msp_helloworld_settings_init, которая должна выполняться в хуке admin_init. Эта функция в свою очередь должна содержать в себе регистрацию других функций, как показано в файле admin.php:

  • msp_helloworld_options_validate – данная функция используется для обработки входных данных (обработка выполняется при помощи фильтра wp_kses_post);
  • msp_helloworld_authorbox_desc – функция используется для создания текстового описания секции с полем ввода;
  • msp_helloworld_authorbox_field – функция служит для отображения поля, в которое и будет вводиться разметка для блока с информацией об авторе.

На рисунке 6 показана готовая страница настроек плагина.

Рисунок 6. Страница настроек плагина
Страница настроек плагина
Страница настроек плагина

В заключение обратимся к функции msp_helloworld_author_block, которая находится во вспомогательном файле core.php и предназначена для отображения нашего блока с информацией об авторе. Эта функция заменяет такие метки, как [author_name], [author_url] и [author_desc], расположенные в базе данных, на соответствующие значения.

Создав базу для плагина и заполнив её значениями, мы получим готовый плагин для WordPress, который после отображения на странице будет выглядеть примерно так, как показано на рисунке 7.

Рисунок 7. Готовый плагин для WordPress
Готовый плагин для WordPress
Готовый плагин для WordPress

Заключение

Плагины являются полезным дополнением к WordPress, так как они не только используются для наполнения Web-сайта информацией, но и позволяют расширить возможности основной системы. Большинство разработчиков не могут обойтись только стандартными функциями WordPress, поэтому существует множество плагинов для решения самых разных задач. Но не стоит забывать о том факте, что чрезмерная нагрузка системы различными плагинами может серьезно сказаться на её производительности. Поэтому старайтесь выбирать наиболее оптимальные реализации плагинов, которые будут соответствовать заданным требованиям, но не будут оказывать негативного влияния на работу системы в целом.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=978208
ArticleTitle=Создание плагина для WordPress
publish-date=07182014