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

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

Почему стоит создавать собственный плагин

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

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

Структура плагина WordPress

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

Пример минимальной структуры:

  • my-plugin/ — корневая папка плагина
  • my-plugin/my-plugin.php — основной файл с заголовком плагина
  • my-plugin/admin-settings.php — файл с кодом страницы настроек (можно и в основном файле, но так удобнее)

Создаем базовый плагин

Начнем с простого шаблона файла my-plugin.php:

<?php
/**
 * Plugin Name: WPBoot Настройки плагина
 * Description: Пример плагина с пользовательской страницей настроек
 * Version: 1.0
 * Author: WPBoot
 */

// Защита от прямого запуска
if (!defined('ABSPATH')) {
    exit;
}

// Подключаем страницу настроек
require_once plugin_dir_path(__FILE__) . 'admin-settings.php';

Этот код определяет плагин и подключает файл с настройками. Следующий шаг — добавить страницу настроек в админ-панель.

Добавляем страницу настроек в меню WordPress

В файле admin-settings.php регистрируем страницу с помощью хука admin_menu:

<?php

add_action('admin_menu', 'wpboot_add_settings_page');

function wpboot_add_settings_page() {
    add_options_page(
        'Настройки WPBoot', // Заголовок страницы
        'WPBoot Настройки', // Название меню
        'manage_options',     // Права доступа
        'wpboot-settings',    // Уникальный slug
        'wpboot_render_settings_page' // Функция вывода содержимого
    );
}

function wpboot_render_settings_page() {
    if (!current_user_can('manage_options')) {
        return;
    }
    ?>
    <div class="wrap">
        <h1>Настройки плагина WPBoot</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('wpboot_options_group');
            do_settings_sections('wpboot-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

Здесь мы добавили страницу в раздел «Настройки» и создали форму для вывода полей настроек.

Регистрируем настройки и поля

Для хранения настроек используем API WordPress Settings. В этом же файле добавим регистрацию настроек:

add_action('admin_init', 'wpboot_register_settings');

function wpboot_register_settings() {
    register_setting('wpboot_options_group', 'wpboot_option_text');

    add_settings_section(
        'wpboot_main_section',
        'Основные настройки',
        'wpboot_section_callback',
        'wpboot-settings'
    );

    add_settings_field(
        'wpboot_option_text',
        'Текстовое поле',
        'wpboot_text_field_render',
        'wpboot-settings',
        'wpboot_main_section'
    );
}

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

function wpboot_text_field_render() {
    $value = get_option('wpboot_option_text', '');
    echo '<input type="text" name="wpboot_option_text" value="' . esc_attr($value) . '" size="50" />';
}

Мы зарегистрировали настройку wpboot_option_text, создали секцию и поле ввода. Теперь при сохранении настройки будут сохраняться в базу данных.

Использование настроек в плагине

Чтобы использовать значение настройки в коде плагина, достаточно вызвать:

$text = get_option('wpboot_option_text', 'значение по умолчанию');
// Пример использования
echo 'Значение настройки: ' . esc_html($text);

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

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

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

add_action('admin_init', 'wpboot_register_settings');

function wpboot_register_settings() {
    register_setting('wpboot_options_group', 'wpboot_option_text');
    register_setting('wpboot_options_group', 'wpboot_option_checkbox');
    register_setting('wpboot_options_group', 'wpboot_option_select');

    add_settings_section(
        'wpboot_main_section',
        'Основные настройки',
        'wpboot_section_callback',
        'wpboot-settings'
    );

    add_settings_field(
        'wpboot_option_text',
        'Текстовое поле',
        'wpboot_text_field_render',
        'wpboot-settings',
        'wpboot_main_section'
    );

    add_settings_field(
        'wpboot_option_checkbox',
        'Чекбокс включения',
        'wpboot_checkbox_field_render',
        'wpboot-settings',
        'wpboot_main_section'
    );

    add_settings_field(
        'wpboot_option_select',
        'Выберите вариант',
        'wpboot_select_field_render',
        'wpboot-settings',
        'wpboot_main_section'
    );
}

function wpboot_checkbox_field_render() {
    $value = get_option('wpboot_option_checkbox', '');
    echo '<input type="checkbox" name="wpboot_option_checkbox" value="1" ' . checked(1, $value, false) . ' /> Включено';
}

function wpboot_select_field_render() {
    $value = get_option('wpboot_option_select', 'option1');
    $options = [
        'option1' => 'Вариант 1',
        'option2' => 'Вариант 2',
        'option3' => 'Вариант 3',
    ];
    echo '<select name="wpboot_option_select">';
    foreach ($options as $key => $label) {
        printf('<option value="%s" %s>%s</option>', esc_attr($key), selected($value, $key, false), esc_html($label));
    }
    echo '</select>';
}

Теперь в настройках будут три поля разных типов, которые сохраняются и доступны для использования.

Примеры полезных плагинов с расширенными настройками

Если вам нравится идея создания плагинов с настройками, посмотрите на следующие популярные плагины и их архитектуру:

  • Contact Form 7 — удобная форма обратной связи с множеством параметров
  • Yoast SEO — плагин для SEO с большим количеством настроек и аналитики
  • WooCommerce — сложный плагин для интернет-магазинов с сотнями опций

Изучая их код, можно почерпнуть много полезного для своих проектов.

Советы по безопасности и производительности

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

  • Всегда проверяйте права доступа (current_user_can) перед выводом страниц и сохранением настроек.
  • Используйте функции esc_html, esc_attr и checked для безопасного вывода данных.
  • Обрабатывайте и валидируйте данные при сохранении настроек.

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

Заключение

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

WooCommerce: автоматическое изменение цены товара при применении купона
08.06.2026
Как исправить ошибку 429 в WordPress при чрезмерной загрузке API
03.07.2026
Как автоматизировать управление виджетами WordPress с помощью кода
03.01.2026
Как быстро использовать атрибуты WooCommerce для фильтрации и вывода товаров
03.05.2026
Как добавить поддержку WebP в WordPress без плагинов
06.02.2026