Создание плагина для WordPress. Часть 1.
Одна из главных причин большой популярности WordPress — это простота расширения и изменения системы под свои нужды с помощью плагинов.
На первый взгляд создание плагина может показаться трудной задачей, но на самом деле все проще, чем вы думаете. Это первый урок серии «Создание плагина для WordPress», в которой будут рассмотрены важные принципы и составные части данного процесса. По завершении уроков вы будете готовы к самостоятельным экспериментам по созданию WordPress плагинов, опираясь на общепринятые правила сообщества системы.
Что такое плагин для WordPress
Это PHP код, который изменяет или расширяет начальный функционал системы.
WordPress предоставляет простой, но гибкий API для создания плагинов. Вот некоторые преимущества, которые предлагает WordPress разработчикам:
- Нет необходимости изменять ядро системы для получения дополнительной функциональности. Это значит плагин будет работать даже после обновления системы.
- В WordPress есть механизм деактивации плагина, когда ошибка может привести к краху сайта.
- Модульность кода системы упрощает обновление и сопровождение.
- Функции плагинов никак не связаны с темами.
- Один плагин может быть использован с разными темами и иметь независимые от дизайна функции.
- Код плагина может реализовывать современные техники программирования, ООП например, это никак не повлияет на использование родных функций, классов и интерфейсов WordPress.
Важная задача, которую мы решим в этом уроке — создание фундамента для плагина. Наш плагин должен соответствовать некоторым правилам, чтобы WordPress мог распознать его. В то же время мы должны придерживаться общепринятых принципов разработки плагинов, чтобы избежать конфликтов с другими плагинами на сайте.
Название и файлы плагина
Прежде всего вы должны убедиться, что название вашего плагина уникально. Даже если вы не собираетесь выкладывать свое творение на всеобщее обозрение, вы должны быть уверены, что на сайте не возникнет ситуации использования двух плагинов с одним именем. Воспользуйтесь поиском по плагинам WordPress, перед выбором названия.
Для уникальности названия многие разработчики добавляют префикс — инициалы автора или некоторая аббревиатура. Префикс может быть использован везде — в именах файлов, функций, классов, переменных и т.д. Это поможет избежать возможных конфликтов с другими плагинами, темами и самим ядром системы.
Пример. Пусть наш плагин называется “Hello World Plugin” и для увеличения вероятности уникальности названия добавим префикс “My super prefix”, сокращенный до “MSP”. Таким образом мы получим уникальное название “MSP Hello World Plugin”. Поиск по плагинам подтверждает это.
Следующий шаг — создание файлов плагина. Рекомендуется располагать плагин в отдельной папке внутри специальной директории для плагинов. Имя папки должно соответствовать названию плагина, в нашем случае можно назвать ‘msp-helloworld’. Папка должна содержать главный файл плагина с таким же именем: ‘msp-helloworld.php’.
Так же «кодекс» WordPress рекомендует создать readme.txt файл. В этом файле содержится информация о плагине в стандартной форме. Если вы собираетесь выложить свой плагин в репозиторий плагинов, то наличие этого файла обязательно.
Если ваш плагин использует множество файлов, загружает картинки, css или JavaScript, вам необходимо хранить их в подпапках вашего плагина. Правильная организация структуры файлов — признак хорошего тона. Мы будем придерживаться следующего шаблона:
Заголовок плагина
У каждого плагина обязательно должен быть заголовок, это помогает WordPress распознать плагин и вывести информацию о нем на странице управления плагинами.
Заголовок — это комментарий PHP, расположенный вначале главного файла плагина:
/* Plugin Name: MSP Hello World Description: Create hello world message Version: 1.0 Author: Author's name Author URI: http://easy-code.ru/ Plugin URI: http://easy-code.ru/lesson/building-wordpress-plugin-part-one */
Информация из заголовка будет показана на странице управления плагинами WordPress
Порядок строк не важен, кодировка файла должна быть UTF-8.
Путь к файлам
Так как мы используем разные файлы для нашего плагина, мы должны определить правильный путь к ним. Папка wp-content может быть перемещена из стандартного положения, поэтому жесткое объявление путей не подходит, они должны определяться автоматически.
В WordPress есть две функции plugin_dir_path и plugin_dir_url для определения адресов файлов:
define('MSP_HELLOWORLD_DIR', plugin_dir_path(__FILE__)); define('MSP_HELLOWORLD_URL', plugin_dir_url(__FILE__));
Этот код определяет путь к папке плагина внутри директории WordPress и объявляет константы, содержащие его. После мы можем использовать эти константы вместе с известными относительными путями к подпапкам, например: MSP_HELLOWORLD_DIR.’assets/img/image.jpg’.
Используя эти константы мы также можем подключать необходимые файлы в главном PHP файле:
function msp_helloworld_load(){ if(is_admin()) // подключаем файлы администратора, только если он авторизован require_once(MSP_HELLOWORLD_DIR.'includes/admin.php'); require_once(MSP_HELLOWORLD_DIR.'includes/core.php'); } msp_helloworld_load();
Состояние плагина
После установки плагин может быть в активном или деактивированном состоянии.
Если плагин активирован, то WordPress будет выполнять его код при каждой загрузке страницы.
Плагин также можно деактивировать, это значит файлы плагина остаются на месте, но код не исполняется (плагин можно удалить полностью, т.е. удалить его файлы из папки плагинов).
WordPress отслеживает состояние плагина и исполняет необходимый код, когда состояние меняется. Если какой-то код предназначен для выполнения только при активации или деактивации, можно исполнять его только в эти моменты, а не при каждой загрузке страницы.
Например, если плагин хранит свои настройки в базе данных, необходимо удалить их из базы при удалении плагина. Как это сделать?
Для выполнения действий при активации и деактивации мы должны зарегистрировать так называемые ‘activation hook’ и ‘deactivation hook’. Таким образом мы сообщим WordPress какую функцию необходимо выполнить при том или ином событии. Пример:
register_activation_hook(__FILE__, 'msp_helloworld_activation'); register_deactivation_hook(__FILE__, 'msp_helloworld_deactivation'); function msp_helloworld_activation() { // действие при активации } function msp_helloworld_deactivation() { // при деактивации }
Для выполнения действий при удалении плагина есть 2 способа.
Первый — это создать файл uninstall.php в главной папке плагина (вместе с главным файлом и readme.txt) и включить в него необходимый код. Если uninstall.php существует, WordPress автоматически выполнит его при удалении плагина. Второй способ — зарегистрировать uninstall hook in так же как события для активации и деактивации. Пример:
register_activation_hook(__FILE__, 'msp_helloworld_activation'); function msp_helloworld_activation() { // действие при активации // регистрируем действие при удалении register_uninstall_hook(__FILE__, 'msp_helloworld_uninstall'); } function msp_helloworld_uninstall(){ //действие при удалении }
Важно, что сработает только один из способов, если существует uninstall.php, то зарегистрированная функция не сработает.
Общие правила
Подводя итоги, сформулируем несколько правил, которых необходимо придерживаться при создании плагина для WordPress:
- Придумайте уникальное название
- Создайте отдельную папку для плагина
- Соблюдайте структуру хранения файлов, создайте подпапки для PHP файлов, переводов и других файлов
- Создайте главный файл плагина и заполните заголовок плагина.
- Создайте readme.txt
- Используйте функции для определения путей к файлам
- Создайте дополнительные PHP файлы и подключите их в главном
- Создайте функции для обработки активации и деактивации
- Создайте скрипт для удаления
Заключение
После всех описанных шагов, вы будете готовы писать основную часть плагина и заставить его делать что-либо. В следующих статьях мы продолжим знакомиться с принципами создания плагина для WordPress. Следующая часть урока.
Отлично, первый урок понятен, надеюсь, со вторым разберусь.
Хорошая статья для новичков, спасибо за проделанную работу.
Классная статья, мне понравилось. Всё коротко и ясно.
Отличная статья, ничего лишнего!
Спасибо!
Код конечно же не безупречен, но все же работает. Спасибо автору.