Как создать свой плагин для WordPress с нуля

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

Что такое плагин WordPress и зачем его создавать

Плагин — это пакет PHP-кода, который расширяет базовые возможности WordPress. Он может добавлять новые функции, изменять поведение сайта или интегрироваться с внешними сервисами. Создание собственного плагина полезно, если:

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

Плагины работают независимо от темы, что делает их гибким инструментом для разработчиков.

Структура плагина WordPress: базовые файлы и папки

Минимальный плагин — это один PHP-файл с правильным заголовком. Однако для удобства развития лучше создавать отдельную папку с файлами. Рассмотрим структуру:

  • wpengine-myplugin/ — корневая папка плагина.
  • wpengine-myplugin/wpengine-myplugin.php — главный файл плагина с объявлением и основным кодом.
  • wpengine-myplugin/includes/ — вспомогательные файлы с функциями.
  • wpengine-myplugin/assets/ — CSS, JS, изображения.

Пример минимального заголовка в wpengine-myplugin.php:

<?php
/**
 * Plugin Name: WP Engine My Plugin
 * Description: Пример простого плагина для WordPress.
 * Version: 1.0
 * Author: WPengine.ru
 */

// Безопасность, чтобы файл не запускался напрямую
if (!defined('ABSPATH')) {
    exit;
}

Регистрация базовой функции плагина: добавление шорткода

Шорткоды — простой способ внедрить динамический контент в записи и страницы. Добавим шорткод, который выводит приветствие.

Код для добавления в wpengine-myplugin.php:

function wpengine_myplugin_hello_shortcode() {
    return '<p>Привет, это мой первый плагин для WordPress!</p>';
}
add_shortcode('wpengine_hello', 'wpengine_myplugin_hello_shortcode');

Теперь, если в редакторе добавить [wpengine_hello], пользователь увидит приветственное сообщение. Это простой пример, но он демонстрирует базовый принцип расширения WordPress.

Использование хуков и фильтров для расширения функционала

WordPress предоставляет множество хуков (actions) и фильтров (filters) для изменения поведения ядра и других плагинов. Ваш плагин может подписываться на них для реализации логики.

Например, добавим сообщение в админ-панель на главной странице:

function wpengine_myplugin_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>Плагин WP Engine My Plugin активен!</p></div>';
}
add_action('admin_notices', 'wpengine_myplugin_admin_notice');

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

Фильтр для изменения заголовка сайта

Для демонстрации фильтра изменим заголовок сайта динамически:

function wpengine_myplugin_filter_bloginfo_title($title) {
    return $title . ' | дополнено плагином WP Engine';
}
add_filter('bloginfo', 'wpengine_myplugin_filter_bloginfo_title', 10, 1);

Функция дописывает текст к названию сайта, что можно использовать для SEO или брендинга.

Добавление настроек плагина в админ-панель

Для удобства пользователей полезно добавить страницу настроек. Рассмотрим создание простого меню и формы с опцией.

Добавим меню:

function wpengine_myplugin_admin_menu() {
    add_menu_page(
        'Настройки WP Engine My Plugin',
        'WP Engine Plugin',
        'manage_options',
        'wpengine-myplugin-settings',
        'wpengine_myplugin_settings_page'
    );
}
add_action('admin_menu', 'wpengine_myplugin_admin_menu');

Создадим callback для страницы настроек:

function wpengine_myplugin_settings_page() {
    // Проверяем права
    if (!current_user_can('manage_options')) {
        return;
    }

    // Обработка сохранения
    if (isset($_POST['wpengine_myplugin_text'])) {
        update_option('wpengine_myplugin_text', sanitize_text_field($_POST['wpengine_myplugin_text']));
        echo '<div class="updated">Настройки сохранены.</div>';
    }

    $value = get_option('wpengine_myplugin_text', '');
    ?>
    <div class="wrap">
        <h1>Настройки WP Engine My Plugin</h1>
        <form method="post" action="">
            <label for="wpengine_myplugin_text">Введите текст:</label><br>
            <input type="text" id="wpengine_myplugin_text" name="wpengine_myplugin_text" value="<?php echo esc_attr($value); ?>" size="50" /><br><br>
            <input type="submit" class="button button-primary" value="Сохранить" />
        </form>
    </div>
    <?php
}

Так пользователь сможет менять текст, который плагин будет использовать, например, в шорткоде.

Использование сохранённой опции в шорткоде

Изменим наш шорткод, чтобы он выводил сохранённое значение:

function wpengine_myplugin_hello_shortcode() {
    $text = get_option('wpengine_myplugin_text', 'Привет, это мой первый плагин для WordPress!');
    return '<p>' . esc_html($text) . '</p>';
}
add_shortcode('wpengine_hello', 'wpengine_myplugin_hello_shortcode');

Подключение CSS и JavaScript в плагине

Для улучшения интерфейса часто нужны стили и скрипты. Правильный способ — использовать хуки wp_enqueue_scripts для публичной части и admin_enqueue_scripts для админки.

Пример подключения стилей и скриптов в публичной части:

function wpengine_myplugin_enqueue_scripts() {
    wp_enqueue_style('wpengine-myplugin-style', plugin_dir_url(__FILE__) . 'assets/style.css');
    wp_enqueue_script('wpengine-myplugin-script', plugin_dir_url(__FILE__) . 'assets/script.js', array('jquery'), false, true);
}
add_action('wp_enqueue_scripts', 'wpengine_myplugin_enqueue_scripts');

Для админки аналогично:

function wpengine_myplugin_admin_scripts() {
    wp_enqueue_style('wpengine-myplugin-admin-style', plugin_dir_url(__FILE__) . 'assets/admin-style.css');
}
add_action('admin_enqueue_scripts', 'wpengine_myplugin_admin_scripts');

Это гарантирует, что ресурсы будут подключены только там, где нужны, без лишней нагрузки.

Отладка и локализация плагина

Для удобства отладки используйте функции error_log() и WP_DEBUG. Для перевода нужно подключить текстовые домены и использовать функции __() и _e().

Пример локализации строки:

__('Привет, это мой первый плагин для WordPress!', 'wpengine-myplugin');

Добавьте в плагин загрузку текстового домена:

function wpengine_myplugin_load_textdomain() {
    load_plugin_textdomain('wpengine-myplugin', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
add_action('plugins_loaded', 'wpengine_myplugin_load_textdomain');

Это позволит легко переводить плагин на другие языки.

Полезные плагины для разработки и тестирования собственных плагинов

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

  • Query Monitor — детальный дебаг запросов, ошибок и хуков.
  • Debug Bar — панель отладки в админке.
  • Developer — набор инструментов для разработчиков.
  • Plugin Boilerplate Generator — автоматическая генерация базовой структуры плагина.

Эти инструменты помогут ускорить создание и выявление ошибок в вашем коде.

Выводы по созданию плагина для WordPress

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

WooCommerce: решение проблем с автоматическим удалением товаров без заказов
28.05.2026
Как создать автоматические задачи в WordPress с помощью WP-Cron
22.01.2026
Как сделать отложенный запуск cron задач в WordPress
10.02.2026
Как использовать WPCommunity для создания социальной сети на WordPress
06.01.2026
Как удалить старые чанк-блоки Gutenberg из базы данных WordPress
18.01.2026