Как создать свой плагин WordPress: пошаговое руководство

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

Понимание структуры и принципов плагинов WordPress

Плагины — это модули, которые подключаются к ядру WordPress и изменяют или дополняют его функционал. Каждый плагин — это папка с файлами, основной из которых — PHP-файл с шапкой, где указывается название, версия, автор и описание.

Стандартная структура простого плагина выглядит так:

wp-shablon-myplugin/  
  wp-shablon-myplugin.php
  readme.txt
  assets/
  includes/

Основной файл wp-shablon-myplugin.php должен содержать правильный заголовок, чтобы WordPress распознал плагин:

<?php
/**
 * Plugin Name: WP-Shablon Example Plugin
 * Plugin URI: https://wp-shablon.ru
 * Description: Пример простого плагина для WordPress
 * Version: 1.0
 * Author: WP-Shablon
 * License: GPL2
 */

// Код плагина

Без этого заголовка плагин не отобразится в списке установленных в админке.

Создание базового плагина: шаг за шагом

Начнем с простого примера: создадим плагин, который добавляет в админ-панель уведомление.

1. Создаем папку и файл плагина

В каталоге wp-content/plugins/ создайте папку wp-shablon-notice, в ней файл wp-shablon-notice.php с описанным выше заголовком.

2. Добавляем код для вывода админ-уведомления

Используем хук admin_notices, чтобы добавить сообщение на все страницы админки:

<?php

/**
 * Plugin Name: WP-Shablon Admin Notice
 * Description: Показывает тестовое уведомление в админке
 * Version: 1.0
 * Author: WP-Shablon
 */

function wp_shablon_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>Привет от WP-Shablon! Ваш плагин работает.</p></div>';
}
add_action('admin_notices', 'wp_shablon_admin_notice');

Этот код выведет зеленое уведомление с возможностью закрытия на всех страницах админки.

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

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

Добавление меню настроек

Используем хук admin_menu для регистрации страницы настроек:

function wp_shablon_add_settings_page() {
    add_options_page(
        'Настройки WP-Shablon',
        'WP-Shablon',
        'manage_options',
        'wp-shablon-settings',
        'wp_shablon_render_settings_page'
    );
}
add_action('admin_menu', 'wp_shablon_add_settings_page');

Создаем функцию отображения страницы настроек

Отобразим форму с одной настройкой — приветственным сообщением:

function wp_shablon_render_settings_page() {
    // Проверяем, что пользователь имеет право редактировать настройки
    if (!current_user_can('manage_options')) {
        return;
    }

    // Сохраняем данные при отправке формы
    if (isset($_POST['wp_shablon_message'])) {
        check_admin_referer('wp_shablon_save_settings');
        update_option('wp_shablon_message', sanitize_text_field($_POST['wp_shablon_message']));
        echo '<div class="updated"><p>Настройки сохранены.</p></div>';
    }

    $message = get_option('wp_shablon_message', 'Привет от WP-Shablon!');
    ?>
    <div class="wrap">
        <h1>Настройки WP-Shablon</h1>
        <form method="post" action="">
            <?php wp_nonce_field('wp_shablon_save_settings'); ?>
            <table class="form-table">
                <tr>
                    <th><label for="wp_shablon_message">Текст сообщения</label></th>
                    <td><input name="wp_shablon_message" type="text" id="wp_shablon_message" value="<?php echo esc_attr($message); ?>" class="regular-text" /></td>
                </tr>
            </table>
            <input type="submit" class="button button-primary" value="Сохранить" />
        </form>
    </div>
    <?php
}

Теперь пользователь может изменить текст уведомления.

Обновляем админ-уведомление с настройкой

Изменим функцию вывода уведомления, чтобы использовать сохраненное значение:

function wp_shablon_admin_notice() {
    $message = get_option('wp_shablon_message', 'Привет от WP-Shablon! Ваш плагин работает.');
    echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($message) . '</p></div>';
}
add_action('admin_notices', 'wp_shablon_admin_notice');

Рекомендации по безопасности и производительности плагина

При разработке плагина важно учитывать несколько ключевых аспектов:

  • Использование функций санитизации и проверки nonce — это предотвращает атаки CSRF и XSS.
  • Правильные права доступа — используйте current_user_can() для ограничения доступа к настройкам.
  • Оптимизация загрузки — не нагружайте фронтенд лишним кодом, если это не нужно.
  • Использование префиксов — чтобы избежать конфликтов функций и переменных с другими плагинами, в нашем примере используется префикс wp_shablon_.

Дополнительные возможности и пути развития плагина

После создания базового плагина можно добавить:

  • Локализацию с помощью функций __() и _e() для поддержки разных языков.
  • Расширенные настройки с использованием API настроек WordPress.
  • Подключение CSS и JS для улучшения интерфейса.
  • Обработку AJAX-запросов для динамического взаимодействия без перезагрузки страницы.

Все это позволит сделать плагин более удобным и функциональным.

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

function wp_shablon_admin_assets($hook) {
    if ($hook !== 'settings_page_wp-shablon-settings') {
        return;
    }
    wp_enqueue_style('wp-shablon-admin-style', plugins_url('assets/admin.css', __FILE__));
    wp_enqueue_script('wp-shablon-admin-script', plugins_url('assets/admin.js', __FILE__), array('jquery'), null, true);
}
add_action('admin_enqueue_scripts', 'wp_shablon_admin_assets');

Таким образом, вы подключите свои стили и скрипты только на странице настроек.

Как удалить неиспользуемые метаданные в WordPress
29.01.2026
WooCommerce: решение проблемы с отображением цен после изменения валюты
18.05.2026
Как использовать AJAX в WordPress для динамического обновления контента
03.12.2025
Как создать динамические выборы (селекты) в админке WordPress с примерами кода
30.12.2025
Как изменить структуру URL в WordPress без потери SEO
05.01.2026