Создание плагина 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. Также запустите чек‑лист безопасности.