Как создать плагин
В основе любого плагина лежит PHP код, логика его работы и правильное использование API WordPress. Задачей любого плагина должно быть создание нового функционала с минимально возможной нагрузкой, совместимость с ядром WordPress и грамотная работа кода в условиях постоянно-обновляющейся системы.
Создание плагина
Чтобы создать плагин WordPress нужно:
-
Создать папку плагина. В ней будут лежать файлы нашего плагина. Создается она в папке всех плагинов WordPress. Например, создаем папку
/wp-content/plugins/my-plugin-name
. -
Создать главный файл плагина. Рекомендуется чтобы название этого файла совпадало с названием папки плагина. Например,
my-plugin-name.php
→/wp-content/plugins/my-plugin-name/my-plugin-name.php
. -
Создать описание плагина - заголовки плагина. Они нужны чтобы wordpress распознал плагин как плагин, иначе он просто не будет работать. В самое начало главного файла плагина, нужно добавить php комментарий, где указать имя плагина:
<?php /* * Plugin Name: Мой первый плагин */
Готово! Теперь наш плагин можно увидеть в разделе Плагины в админ-панели.
Если плагин является всего одним файлом как Hello Dolly, то его можно поместить прямо в папку плагинов - /plugins/hello.php
и все будет работать. Однако, рекомендуется соблюдать стандарт: файлы плагина должны находиться в своей собственной папке, а главный файл плагина должен иметь название папки плагина.
Дополнительные данные в заголовке
Чтобы плагин начал работать достаточно указать только Plugin Name
(название плагина). Но можно также указать другие параметры плагина - это улучшит отображение плагина в консоли WordPress.
<?php /** * Plugin Name: Название плагина * Description: Описание плагина (140 символов) * * Plugin URI: Ссылка на страницу плагина * Author URI: Ссылка на автора * Author: Имя автора * * Text Domain: ID перевода, указывается в load_plugin_textdomain() * Domain Path: Путь до файла перевода. * * Requires at least: 5.7 * Requires PHP: 7.0 * * License: GPL2 * License URI: https://www.gnu.org/licenses/gpl-2.0.html * * Network: true - активирует плагин для всей сети * Update URI: https://example.com/link_to_update * * Requires Plugins: some-plugin, some-plugin-2 * * Version: 1.0 */ // код плагина
- Plugin Name:(обязательный)
- Название плагина, которое отображается в списке плагинов в админке.
- Description:
- Краткое описание плагина, которое отображается в разделе Плагины в админке. Рекомендуется не превышать 140 символов.
- Version:
- Номер текущей версии плагина, например, 1.0 или 1.0.3.
При установке версии имейте в виду, что WP для сравнения версий использует функцию version_compare(). Поэтому при изменении версии убедитесь, что новая версия будет выше. Например, 1.02 больше, чем 1.1.
- Plugin URI:
- Домашняя страница плагина, которая может быть на WordPress.org или на вашем собственном сайте.
- Author:
- Имя автора плагина. В списке может быть более одного автора.
- Author URI:
- Сайт автора или профиль на другом веб-сайте, например, WordPress.org.
- Requires at least:
- Минимальная требуемая версия WordPress. Например: 5.7.
- Requires PHP:
- Минимальная требуемая версия PHP. Например: 7.4.
- License:
- Короткое имя лицензии плагина, например GPL2. Более подробную информацию о лицензировании можно найти на WordPress.org.
- License URI:
- Ссылка на лицензию, например, https://www.gnu.org/licenses/gpl-2.0.html.
- Text Domain:
- Идентификатор перевода (домен локализации), используется в функциях локализации и в названии файла перевода mo. Подробнее смотрите цитату здесь.
- Domain Path:
- Нужен, если файл перевода находится не в той же папке, в которой находится текущий файл. Например, .mo файл находится в папке
/myplugin/languages
, а файл плагина в/myplugin/myplugin.php
, тогда тут указываем/languages
. - Network:
- Укажите "true", чтобы плагин обязательно активировался по всей сети сайтов в MU сборке WordPress. Это сделает невозможным активировать плагин для одного сайта, если активирована мультисеть.
- Update URI:
- URL для обновления сайта. Используется в функции wp_update_plugins(). Из домена будет создан хук update_plugins_(hostname).
- Requires Plugins:(WP 6.5)
- Список плагинов, от которых зависит текущий плагин. Нужно указывать ярлыки плагинов (через запятую). Например,
my-plugin
(обычно это название папки плагина).
Формат my-plugin/my-plugin.php
не поддерживается.
Подробнее про зависимости плагина читайте здесь.
Шаблон для создания плагина WordPress
Смотрите также: рейтинг стартовых тем и плагинов.
Чтобы не создавать файлы и структуру с нуля, можно использовать шаблон для создания плагина:
- WordPress Plugin Boilerplate - генератор шаблона, где указывается название плагина, которое будет использовано в названиях папок, классов и функций - WordPress Plugin Boilerplate Generator.
Шаблон представляет собой стандартную и организованную объектно-ориентированную основу.
Шаблон придерживаются стандартов PHP кода для WordPress.
Используя такой подход, можно быть уверенным в более четкой и понятной структуре плагина. Так можно сгенерировать основу и затем просто удалить все ненужные файлы, оставив структуру папок - структура важна!
Хуки в плагине
По всему ядру WordPress расположено множество хуков. Хуки позволяют подключиться в определенных местах к коду ядра WordPress, чтобы изменить его поведение, при этом не затрагивая файлы ядра.
Существует два типа хуков в WordPress:
- События (actions) — позволяют добавлять или изменять функционал WordPress.
- Фильтры (filters) — позволяют изменять данные.
Хуки нужны не только для разработчиков плагинов, но и тем кто будет использовать ваш плагин. Хуки используются везде: в самом ядре WordPress, в плагинах и темах. Именно хуки делают WordPress таким гибким.
Непосредственно к плагинам относятся три функции:
-
register_activation_hook() - регистрирует функцию, которая будет срабатывать во время активации плагина.
Используется для добавления настроек плагина и т.п. -
register_deactivation_hook() - регистрирует функцию, которая должна запускаться после деактивации плагина.
Используется для удаления временных данных плагина. - register_uninstall_hook() - регистрирует функцию, которая вызывается при удалении плагина.
Используется при удалении плагин для удаления всех данных плагина: в настройках, в файлах, в базе данных и т.д.
Кроме этих трех функций к API плагинов относятся все функции хуков и некоторые функции плагинов.
Можно создавать свои собственные хуки в исходном коде плагина с помощью do_action() или apply_filters(). Они позволят пользователям вашего плагина расширить его возможности, точно также как WordPress позволяет вам расширять свои возможности.
Представьте, что вы создали плагин и его использует другой разработчик, но при этом вы продолжаете улучшать плагин и выпускаете новые версии. При обновлении все предыдущие файлы плагина затираются новыми. Так, если другой разработчик вносил правки прямо в файлы вашего плагина, то его изменения будут утеряны. Чтобы этого не случилось, нужны хуки, подключаясь к которым другой разработчик сможет расширить ваш плагин, не изменяя кода самого плагина.
PHP Функции и WordPress API
WordPress предоставляет ряд API. API могут значительно упростить написание кода. Т.е. не нужно изобретать колесо, когда оно уже есть.
Некоторые API WordPress:
- API настроек - упрощает создание и управление опциями плагина, которые сохраняются в базу данных.
- plugin_dir_url() — Получает URL папки (директории, каталога), где находится указанный файл плагина (со слэшем на конце).
- register_activation_hook() — Регистрирует функцию, которая будет срабатывать при время активации плагина.
- register_deactivation_hook() — Регистрирует функцию, которая будет запускаться после деактивации плагина.
- register_uninstall_hook() — Регистрирует функцию, которая вызывается при удалении плагина, чтобы почистить все следы прибывания плагина в системе.
- HTTP API - упрощает создание HTTP запросов в PHP. Отличная замена велосипедов на cURL.
Как WordPress загружает плагины
При активации плагина WordPress, записывает путь на его главный файл в опцию active_plugins. Далее при загрузке любой страницы (админки и фронта) WordPress просто подключает все файлы из опции active_plugins (пути на них там хранятся в виде массива). Смотрите как это выглядит:
$active_plugins = get_option( 'active_plugins' ); /* Получим в $active_plugins Array ( [0] => hello-dolly/hello-dolly.php [1] => backupwordpress/backupwordpress.php [2] => democracy-poll/democracy.php [3] => disable-emojis/disable-emojis.php ) */
Из всего этого следует: просто своим присутствием плагины не влияют на скорость работы сайта (за исключением подключения файла плагина, а это супер быстрая операция). Неактивные плагины не влияют вообще никак. Подробнее читайте здесь.
Репозиторий плагинов WordPress
Плагин может быть личный (создается только для одного сайта), а может быть публичный (выкладывается в репозиторий плагинов WordPress).
Требования к личному плагину, обычно минимальны, а вот с публичным все сложнее, нужна лицензия, поддержка, совместимость, локализация и прочее. Поэтому публичные плагины создавать в разы сложнее.
Если планируете отправлять плагин на WordPress.org, нужно следовать требованиям к заголовку плагина WordPress.
Лицензия сообщает пользователям, как они могут использовать код плагина в своих целях. Для поддержания совместимости с ядром WordPress рекомендуется выбрать лицензию, работающую с GNU General Public License (GPLv2+).