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

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

Основы создания плагина WordPress: структура и требования

Плагин WordPress — это по сути набор PHP-файлов и других ресурсов, которые расширяют возможности сайта. Чтобы WordPress распознал ваш плагин, достаточно создать папку в директории wp-content/plugins и в ней файл с заголовком плагина.

Минимальная структура плагина выглядит так:

  • wp-content/plugins/my-plugin/my-plugin.php

В файле my-plugin.php должен быть специальный заголовок, который сообщает WordPress, что это плагин:

<?php
/*
Plugin Name: WPSolution Sample Plugin
Plugin URI: https://wpsolution.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WPSolution
Author URI: https://wpsolution.ru
License: GPL2
*/

// Код плагина здесь

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

Регистрация функции и хук активации плагина

Для удобства и чтобы избежать конфликтов, все функции желательно именовать с префиксом, например wpsolution_. Начнем с простой функции, которая выводит сообщение в административной панели.

function wpsolution_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>Плагин WPSolution активирован!</p></div>';
}
add_action('admin_notices', 'wpsolution_admin_notice');

Этот код добавит уведомление в верхнюю часть любой админ-страницы.

Также для плагина полезно реализовать функцию, которая выполняется при его активации:

function wpsolution_activate_plugin() {
    // Здесь можно добавить код для создания таблиц, настроек и т.д.
}
register_activation_hook(__FILE__, 'wpsolution_activate_plugin');

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

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

Чтобы плагин был более функциональным, стоит добавить страницу настроек. Для этого используем API WordPress.

Сначала добавим пункт меню в админку:

function wpsolution_add_admin_menu() {
    add_options_page('Настройки WPSolution', 'WPSolution', 'manage_options', 'wpsolution', 'wpsolution_options_page');
}
add_action('admin_menu', 'wpsolution_add_admin_menu');

Далее создадим функцию, которая выведет форму настроек:

function wpsolution_options_page() {
    ?>
    <div class="wrap">
        <h1>Настройки плагина WPSolution</h1>
        <form action="options.php" method="post">
            <?php
            settings_fields('wpsolution_options_group');
            do_settings_sections('wpsolution');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Для регистрации настроек используем следующий код:

function wpsolution_settings_init() {
    register_setting('wpsolution_options_group', 'wpsolution_option_name');

    add_settings_section(
        'wpsolution_section',
        'Основные настройки',
        'wpsolution_section_callback',
        'wpsolution'
    );

    add_settings_field(
        'wpsolution_option_field',
        'Опция плагина',
        'wpsolution_option_field_render',
        'wpsolution',
        'wpsolution_section'
    );
}
add_action('admin_init', 'wpsolution_settings_init');

function wpsolution_section_callback() {
    echo 'Настройте параметры плагина ниже.';
}

function wpsolution_option_field_render() {
    $value = get_option('wpsolution_option_name');
    echo '<input type="text" name="wpsolution_option_name" value="' . esc_attr($value) . '" />';
}

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

Пример расширения: добавление шорткода

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

function wpsolution_shortcode_display() {
    $text = get_option('wpsolution_option_name', 'Текст по умолчанию');
    return '<div class="wpsolution-message">' . esc_html($text) . '</div>';
}
add_shortcode('wpsolution_message', 'wpsolution_shortcode_display');

Теперь пользователь может вставить в контент [wpsolution_message] и увидеть сообщение.

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

При разработке плагинов важно соблюдать базовые правила безопасности. Никогда не забывайте:

  • Использовать функции экранирования (например, esc_html, esc_attr) перед выводом данных.
  • Валидировать и санитизировать входящие данные.
  • Использовать неповторяющиеся префиксы для функций, классов и опций, чтобы избежать конфликтов.
  • Минимизировать количество запросов к базе, использовать кэширование, если необходимо.

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

Полный пример простого плагина WPSolution

Объединим все вместе — минимальный рабочий плагин с настройкой, шорткодом и уведомлением:

<?php
/*
Plugin Name: WPSolution Sample Plugin
Plugin URI: https://wpsolution.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WPSolution
Author URI: https://wpsolution.ru
License: GPL2
*/

function wpsolution_admin_notice() {
    echo '<div class="notice notice-success is-dismissible"><p>Плагин WPSolution активирован!</p></div>';
}
add_action('admin_notices', 'wpsolution_admin_notice');

function wpsolution_activate_plugin() {
    // Код при активации
}
register_activation_hook(__FILE__, 'wpsolution_activate_plugin');

function wpsolution_add_admin_menu() {
    add_options_page('Настройки WPSolution', 'WPSolution', 'manage_options', 'wpsolution', 'wpsolution_options_page');
}
add_action('admin_menu', 'wpsolution_add_admin_menu');

function wpsolution_options_page() {
    ?>
    <div class="wrap">
        <h1>Настройки плагина WPSolution</h1>
        <form action="options.php" method="post">
            <?php
            settings_fields('wpsolution_options_group');
            do_settings_sections('wpsolution');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

function wpsolution_settings_init() {
    register_setting('wpsolution_options_group', 'wpsolution_option_name');

    add_settings_section('wpsolution_section', 'Основные настройки', 'wpsolution_section_callback', 'wpsolution');

    add_settings_field('wpsolution_option_field', 'Опция плагина', 'wpsolution_option_field_render', 'wpsolution', 'wpsolution_section');
}
add_action('admin_init', 'wpsolution_settings_init');

function wpsolution_section_callback() {
    echo 'Настройте параметры плагина ниже.';
}

function wpsolution_option_field_render() {
    $value = get_option('wpsolution_option_name');
    echo '<input type="text" name="wpsolution_option_name" value="' . esc_attr($value) . '" />';
}

function wpsolution_shortcode_display() {
    $text = get_option('wpsolution_option_name', 'Текст по умолчанию');
    return '<div class="wpsolution-message">' . esc_html($text) . '</div>';
}
add_shortcode('wpsolution_message', 'wpsolution_shortcode_display');
Как удалить пустые категории в WordPress с помощью кода
08.04.2026
Как использовать REST API для создания микросервисов в WordPress
06.02.2026
Уникальный хештег для WordPress: создание и применение
09.11.2025
Как удалить порты в WordPress для блокировки внешних запросов
30.03.2026
Как добавить AJAX фильтрацию товаров в WordPress для малого бизнеса
14.03.2026