Создание плагина WordPress с нуля: полное руководство
Подготовка среды разработки
Прежде чем писать код, подготовьте локальный сервер (например, WP‑CLI или локальную базу) и установите последнюю версию WordPress. Работать лучше в IDE с поддержкой PHP (PHPStorm, VS Code).
Установка локального сервера
Скачайте MAMP/WAMP, создайте базу данных и скопируйте файлы WordPress в папку проекта. После этого включите отладку в wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Структура файлов плагина
Плагин – это обычный PHP‑модуль, размещённый в каталоге wp-content/plugins. Минимальная структура выглядит так:
my-awesome-plugin/
├─ my-awesome-plugin.php // основной файл
├─ includes/
│ └─ class‑loader.php // автозагрузка классов
├─ assets/
│ ├─ css/
│ │ └─ style.css
│ └─ js/
│ └─ script.js
└─ readme.txt // описание для репозитория
Основной файл плагина
В начале файла обязательно укажите заголовок плагина – WordPress использует его для отображения в админке.
Работа с хуками WordPress
Хуки позволяют «подключаться» к событиям ядра. Самыми популярными являются add_action и add_filter.
Регистрация функции при активации плагина
register_activation_hook(__FILE__, 'my_plugin_activate');
function my_plugin_activate() {
// Создаём таблицу в базе данных
global $wpdb;
$table = $wpdb->prefix . 'my_plugin_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql);
}
Для деактивации часто удаляют временные данные, но таблицу лучше оставлять, чтобы не потерять информацию.
Хук для вывода скриптов и стилей
add_action('wp_enqueue_scripts', function() {
wp_enqueue_style('my-plugin-style', plugins_url('assets/css/style.css', __FILE__));
wp_enqueue_script('my-plugin-script', plugins_url('assets/js/script.js', __FILE__), ['jquery'], null, true);
});
Создание шорткода
Шорткоды – удобный способ вставить динамический контент в посты и страницы.
Регистрация и обработка шорткода
add_shortcode('my_greeting', 'my_plugin_greeting_shortcode');
function my_plugin_greeting_shortcode($atts) {
$atts = shortcode_atts([
'name' => 'Гость'
], $atts, 'my_greeting');
return ' Привет, ‘ . esc_html($atts[‘name’]) . ‘!
‘; }
После этого в редакторе можно использовать [my_greeting name="Иван"].
Взаимодействие с базой данных
WordPress предоставляет глобальный объект $wpdb для безопасных запросов. Ниже – пример сохранения данных из формы.
Обработчик формы и вставка записи
add_action('admin_post_my_plugin_save', 'my_plugin_save_handler');
function my_plugin_save_handler() {
if (!current_user_can('manage_options')) wp_die('Недостаточно прав');
global $wpdb;
$table = $wpdb->prefix . 'my_plugin_data';
$name = sanitize_text_field($_POST['name']);
$wpdb->insert($table, ['name' => $name]);
wp_redirect(add_query_arg('status', 'success', wp_get_referer()));
exit;
}
Обязательно используйте функции sanitize_text_field, prepare и esc_sql для защиты от SQL‑инъекций.
Тестирование и публикация в репозитории WordPress
Перед отправкой в официальный каталог проверьте плагин на чистой установке, запустите security‑чек‑лист и убедитесь, что в коде нет var_dump и die().
Подготовка readme.txt
Файл readme.txt должен соответствовать требованиям WordPress.org. Пример минимального блока:
=== My Awesome Plugin ===
Contributors: yourname
Tags: shortcode, custom-table
Requires at least: 5.0
Tested up to: 6.5
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
== Description ==
Простой плагин, демонстрирующий создание шорткода и работу с базой данных.
== Installation ==
1. Загрузите папку плагина в /wp-content/plugins/
2. Активируйте плагин через меню «Плагины».
== Changelog ==
= 1.0.0 =
* Первоначальный релиз.
Загрузка в репозиторий
Создайте репозиторий на svn‑сервере WordPress, загрузите файлы, добавьте тег и проверьте статус через svn status. После одобрения ваш плагин будет доступен миллионам сайтов.
Полезные инструменты для ускорения разработки
Для быстрой работы используйте WP‑CLI – команды wp plugin activate my-awesome-plugin, wp db query и др. Не забывайте про кеширование и оптимизацию изображений (см. статью).
❓ Часто задаваемые вопросы
Как правильно регистрировать шорткод в плагине?
Используйте функцию add_shortcode('имя', 'callback') в основном файле плагина или в классе‑инициализаторе. Обязательно проверяйте и экранируйте входные параметры.
Можно ли создавать собственные таблицы в базе WordPress?
Да, при активации плагина вызывайте register_activation_hook и создавайте таблицу через dbDelta(). Не забудьте префикс $wpdb->prefix.
Где хранить скрипты и стили плагина?
Поместите их в подпапку assets/ и подключайте через wp_enqueue_script и wp_enqueue_style в хуке wp_enqueue_scripts.
Как проверить плагин на совместимость с последними версиями WordPress?
Тестируйте на чистой установке последней версии, используйте WP_DEBUG и проверяйте отчёты в debug.log. Также запустите чек‑лист безопасности.