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

4-минутное чтение
2026-03-12
2026-06-03
2,759
Я получаю комиссионные, когда вы совершаете покупки по ссылкам ниже, без дополнительных затрат для вас.

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

Разработка плагина для WordPress начинается с простого PHP-файла. Этот основной файл должен содержать определенные заголовочные комментарии, которые позволяют системе WordPress распознать его и обработать его как плагин. Самый простой плагин может состоять из одного файла. my-first-plugin.php

<?php
/**
 * Plugin Name: 我的第一个插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于演示的简单WordPress插件。
 * Version:     1.0.0
 * Author:      开发者姓名
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

В комментариях в начале файла информация о названии плагина (`Plugin Name`) является обязательной; остальные данные предоставляются по желанию. После активации плагина его функции реализуются путем выполнения соответствующих PHP-функций в подходящие моменты времени. Одним из наиболее распространенных способов реализации таких функций является использование “хуков действий” (action hooks). Например, для добавления текста в футер веб-страницы можно воспользоваться таким подходом. wp_footer Крючок.

// Вывод пользовательского содержимого в нижний колонтитул
function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Спасибо, что используете мой плагин!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

add_action Это встроенная функция ядра WordPress, предназначенная для подключения пользовательских функций к определённым точкам обработки событий («акциям»). Рекомендуется размещать папки с плагинами в определённых местах в файловой структуре сайта. /wp-content/plugins/your-plugin-name/ Кроме основного файла, в эту папку также могут быть включены файлы с CSS-стилями, JavaScript-кодом, изображениями и другими ресурсами.

Рекомендуемое чтение Полное руководство по темам WordPress: от выбора и настройки до разработки.

Как добавить меню управления для плагина?

Чтобы плагин имел страницу настроек в административной панели WordPress, вам необходимо добавить для него меню администрирования. Это обычно делается с помощью admin_menu Для реализации используются действия-хаки (action hooks).

Ультахост (UltaHost) – хостинг-провайдер, предоставляющий услуги хостинга для сайтов, построенных на платформе WordPress.
Гарантия возврата средств в течение 30 дней, неограниченная пропускная способность интернет-канала и объем баз данных, бесплатная защита от DDoS-атак. При покупке на срок 3 лет предоставляется скидка в размере 501 ТБ до 4 ТБ.

Основные функции (Core functions) add_menu_page Используется для добавления главного пункта меню в боковую панель на заднем плане и соответствующей ему страницы настроек.

Функция myplugin_add_admin_menu() {
    add_menu_page(
        'Настройки моего плагина',   // Заголовок страницы
        'Мой плагин',   // Название меню
        'manage_options',   // Требуемые права
        'myplugin-settings',   // Ссылка на меню
        'myplugin_settings_page',   // Функция для отображения страницы
        'dashicons-admin-generic',   // Иконка (опционально)
        6   // Позиция меню (опционально)
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// Настройка HTML-контента страницы
function myplugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form action="/ru/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            settings_fields( 'myplugin_options' ); // 输出安全字段
            do_settings_sections( 'myplugin-settings' ); // 输出设置区域
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

После создания меню следующим шагом является использование API настроек WordPress для определения конкретных настраиваемых параметров.

Используйте API настройок для сохранения конфигурации плагина.

Ручная обработка отправки форм и проверки их безопасности является сложной и подверженной ошибкам процедурой. API настроек WordPress предоставляет стандартизированные способы регистрации, отображения и сохранения настроек. Для этого используются три основные функции:register_setting, add_settings_section и add_settings_field

В следующем примере показано, как зарегистрировать группу опций и добавить текстовое поле.

Рекомендуемое чтение Руководство по оптимизации производительности сайта WordPress: углубленный анализ и практические стратегии.

function myplugin_settings_init() {
    // Зарегистрируйте новую настройку в таблице базы данных `wp_options`.
    register_setting( 'myplugin_options', 'myplugin_settings' ); // Зарегистрируйте новую настройку в базе данных в таблице `wp_options`.

    // Добавьте новый раздел на страницу настроек
    add_settings_section(
        'myplugin_section_basic', // идентификатор раздела
        'Basic Settings', // название раздела
        'myplugin_section_callback', // функция обратного вызова для описания раздела
        'myplugin-settings' // соответствующий слиг страницы
    );

    // Добавляем поле в раздел
    add_settings_field(
        'myplugin_field_text', // id поля
        'example text', // заголовок поля
        'myplugin_field_text_cb', // функция обратного вызова для HTML-вывода поля
        'myplugin-settings', // параметры страницы
        'myplugin_section_basic' // идентификатор поля
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// Функция обратного вызова для описания разделов
function myplugin_section_callback() {
    echo'<p>Это раздел, предназначенный для настройки основных параметров плагина.</p>';
}

// Функция обратного вызова для текстовых полей
function myplugin_field_text_cb() {
    // Получение ранее сохраненных настроек из базы данных
    $options = get_option( 'myplugin_settings' );
    $value = $options['myplugin_field_text'] ?? ''; // Используйте оператор слияния null для получения значения по умолчанию
    // Выведите поле ввода HTML
    echo'<input type="text" name="myplugin_settings[myplugin_field_text]" value="' . esc_attr( $value ) . '" class="regular-text">'echo '<p class="description">Пожалуйста, введите несколько примеров текста.</p>';
}

Значения настроек, сохраненные таким образом, могут быть использованы в любом месте кода плагина. get_option('myplugin_settings') Безопасное получение и использование.

Безопасность и лучшие практики при разработке плагинов

Безопасность является одним из главных аспектов разработки плагинов. Небезопасный плагин может стать источником уязвимостей для всего веб-сайта. Основное правило: никогда не доверяйте вводимым пользователями данным. Все данные, поступающие от пользователей или из внешних источников, должны быть проверены, очищены или обработаны специальными методами (например, с использованием механизмов эскапации) перед тем, как они будут сохранены в базе данных, переданы в файловую систему или отображены на странице.

Проверка и очистка данных

Валидация – это процесс проверки введенных данных на соответствие ожидаемому формату: например, на то, является ли оно адресом электронной почты, числом или находится ли в определенном диапазоне. WordPress предоставляет ряд вспомогательных функций для выполнения этой проверки. is_email(), absint()Процесс очистки заключается в удалении из данных всех незаконных или небезопасных символов на основе выполненной проверки. Для текстовых полей можно использовать специальные методы обработки текста. sanitize_text_field()

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%
// 在处理表单提交时
$user_input = $_POST['some_field'] ?? ''; // 使用空合并运算符避免未定义索引警告
// 清理输入
$clean_input = sanitize_text_field( $user_input );
// 验证是否是正整数
$clean_id = absint( $_POST['post_id'] );
if ( $clean_id <= 0 ) {
    // 处理无效ID的错误
}

Эскапирование данных перед выводом на экран.

Эскапирование – это процесс, обеспечивающий безопасную передачу данных в различные контексты (например, HTML, JavaScript, URL-адреса). Оно крайне важно для предотвращения атак типа XSS (кросс-сайтового скриптинга). WordPress предоставляет мощные функции для эскапирования данных.
* esc_html()Знак “:” используется для эскапирования HTML-кода, чтобы предотвратить его интерпретацию браузером (то есть чтобы HTML-теги не начали выполнять свои функции).
* esc_attr()Данный символ (`:`) используется для эскапирования значений атрибутов HTML-тегов.
* esc_url()Знак “:” используется для эскапирования URL-адресов.
* wp_kses_post()Разрешается безопасно выводить часть HTML-кода с использованием определенного набора правил.

// При выводе пользовательских данных на странице настроек или на фронт-энде
echo '<div class="notice">'`. esc_html($clean_input)`.'</div>'echo '<input type="hidden" value="' . esc_attr( $clean_input ) . '">'echo '<a href="/ru/' . esc_url( $user_url ) . '/">ссылка</a>'echo wp_kses_post($allowed_html_content); // Разрешены HTML-теги на уровне статьи

Кроме того, при обработке запросов к базе данных следует всегда использовать классы, предназначенные для работы с базой данных WordPress. $wpdb Методы предобработки данных, или использование более продвинутых API… WP_QueryВ них встроена защита от взломов с использованием SQL-инъекций. При выполнении операций с файлами используйте соответствующие механизмы безопасности. wp_upload_dir()wp_handle_upload() Используйте соответствующие API для обеспечения безопасности путей (URL-адресов).

Использование хуков (hooks) для достижения высокой расширяемости

Ядро системы плагинов WordPress основано на механизме хуков (hooks), который состоит из так называемых “действий” (actions) и “фильтров” (filters). Благодаря хукам плагины могут изменять поведение или данные WordPress без необходимости модификации основного кода, а также другие разработчики могут расширять функционал вашего плагина.

Рекомендуемое чтение Руководство по разработке тем для WordPress: Создание вашей первой пользовательской темы с нуля

Назначение и создание действий-хуков (action hooks)

Акционные хаки (action hooks) выполняют определенный код в определенные моменты времени; при этом от них не ожидается возвращения какого-либо значения. Плагины могут использовать тысячи встроенных хаков, предоставляемых WordPress. init, wp_enqueue_scripts, save_postВы также можете создавать свои собственные хуки, которые другие разработчики смогут использовать.

Код, который монтируется на этот «хук», выглядит следующим образом:

Общий хостинг InterServer
Общий хостинг $2.50 USD в месяц, первый месяц $0.1 USD промо-код tryinterserver, 461 скрипт облачных приложений, установка в один клик.
// Автоматическое добавление баннера перед содержимым поста
function myplugin_prepend_content( $content ) {
    if ( is_single() ) {
        $custom_text = '<div class="myplugin-banner">Это рекламный блок.</div>';
        $content = $custom_text . $content.
    }
    return $content.
}
add_filter( 'the_content', 'myplugin_prepend_content' );

Обратите внимание: хотя мы и изменили содержимое, для этого были использованы хаки фильтров (filter hooks). the_contentПотому что оно требует возвращения изменённого значения.

Создание пользовательских действий (хуков) для использования do_action Функция:

// 在你的插件代码中定义一个动作点
function myplugin_complete_task() {
    // ... 执行一些任务 ...
    // 发出自定义动作,允许其他代码在此处添加功能
    do_action( 'myplugin_after_task_complete', $task_id, $result );
}

Другие плагины или темы можно добавить следующим образом: add_action('myplugin_after_task_complete', 'callback', 10, 2) Ответь на это действие.

Принцип работы фильтровых хуков и примеры их использования

Фильтровые хуки используются для изменения данных перед их использованием. Они принимают одно значение и должны возвращать другое значение (которое может быть изменено). Таким образом плагины могут модифицировать текст, параметры или результаты запросов.

Используйте встроенные фильтры:

// 修改文章摘要的长度
function myplugin_excerpt_length( $length ) {
    return 20; // 将摘要字数限制改为20字
}
add_filter( 'excerpt_length', 'myplugin_excerpt_length' );

Создание пользовательских фильтров и использование их хуков apply_filters Функция:

function myplugin_get_price( $product_id ) {
    $base_price = get_post_meta( $product_id, 'price', true );
    // 应用过滤器,允许其他代码动态修改价格(例如添加税费、折扣)
    $final_price = apply_filters( 'myplugin_product_price', $base_price, $product_id );
    return $final_price;
}

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

Интернационализация плагинов и управление скриптовыми ресурсами

Зрелый плагин для WordPress должен поддерживать международную версию (иностранные языки), чтобы его можно было перевести на разные языки, а также должен эффективно управлять CSS- и JavaScript-ресурсами как на фронтенде, так и на бэкенде.

Реализация интернационализации плагина

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

Во-первых, определённое в заголовке главного файла плагина. Text Domain(Например, my-first-pluginЭто ваш текстовый поля. Затем, при инициализации плагина (обычно…) init Хук (hook) используется для выполнения определенных действий по вызову. load_plugin_textdomain Функция для загрузки файлов с переводами.

function myplugin_load_textdomain() {
    load_plugin_textdomain(
        'my-first-plugin', // 文本域,必须与文件头一致
        false, // 已弃用参数
        dirname( plugin_basename( __FILE__ ) ) . '/languages' // 语言文件存放的相对路径
    );
}
add_action( 'init', 'myplugin_load_textdomain' );

В коде используется… __() Переведите и верните строку, используя _e() Переведите и выведите строку напрямую.

$settings_title = __( 'My Plugin Settings', 'my-first-plugin' );
_e( 'Hello World!', 'my-first-plugin' );

Разработчики могут использовать это. Poedit Такие инструменты, как Localize, извлекают эти строки из исходного кода и генерируют их. .pot Файл шаблона. .po и .mo Файл хранится в плагине. /languages/ Внутри каталога.

Правильное внедрение CSS и JavaScript.

Никогда не кодируйте напрямую в файлах PHP. <link> или <script> Для загрузки ресурсов используются специальные теги. WordPress предоставляет единую систему управления очередями (enqueue), которая обеспечивает контроль зависимостей между ресурсами, их версий и оптимальное время загрузки.

Для фоновых ресурсов используйте admin_enqueue_scripts Крючок.

function myplugin_admin_scripts( $hook ) {
    // 只在特定插件设置页面加载
    if ( $hook != 'toplevel_page_myplugin-settings' ) {
        return;
    }
    wp_enqueue_style(
        'myplugin-admin-style', // 句柄
        plugins_url( 'css/admin-style.css', __FILE__ ), // 文件URL
        array(), // 依赖
        '1.0.0'  // 版本号,可用于强制浏览器更新缓存
    );
    wp_enqueue_script(
        'myplugin-admin-script',
        plugins_url( 'js/admin-script.js', __FILE__ ),
        array( 'jquery' ), // 依赖jQuery
        '1.0.0',
        true // 在页脚加载
    );
}
add_action( 'admin_enqueue_scripts', 'myplugin_admin_scripts' );

Что касается ресурсов фронтенда, их следует использовать… wp_enqueue_scripts Крючки (hooks) работают по аналогичной логике. Это обеспечивает упорядоченное загрузочное выполнение ресурсов, предотвращает конфликты между ними и позволяет использовать кэш браузера.

резюме

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

Часто задаваемые вопросы

Какие элементы должен включать в себя самый простой плагин для WordPress?

Самый простой плагин требует всего одного PHP-файла, который должен содержать стандартные комментарии, характерные для плагинов. Самым важным из этих комментариев является строка с названием плагина (“Plugin Name”). В этом файле вы можете напрямую писать PHP-код или добавлять новые функции с помощью хуков (hooks).

Например, плагин, содержащий лишь короткий код, который выводит строку “Hello World”, также сможет работать с использованием всего одного такого файла.

Как плагины взаимодействуют с базой данных WordPress?

Рекомендуется использовать встроенные классы для работы с базами данных в WordPress. $wpdbОно предоставляет безопасные способы выполнения запросов к данным, особенно… prepare Этот метод позволяет эффективно предотвратить атаки типа SQL-инъекций.

Для большинства операций с данными (например, получения статей или работы с метаданными) рекомендуется использовать расширенные функции, предоставляемые WordPress. get_posts(), WP_Query, get_post_meta(), update_post_meta() Эти функции уже обеспечивают защиту от угроз безопасности и поддерживают механизмы кэширования на низком уровне. Что касается пользовательских структур данных, разработчики могут создавать соответствующие таблицы при активации плагина.

Где мне можно найти все доступные действия (actions) и фильтры (filters), а также их хэнги (hooks)?

Официальные документации WordPress являются лучшим источником информации о специальных механизмах («хуках»), позволяющих расширять функциональность сайта. Кроме того, разработчики также могут найти нужные хуки, выполнив прямой поиск в исходном коде самой системы WordPress.

Откройте корневой каталог WordPress в кодовом редакторе и выполните поиск нужного файла или информации. do_action или apply_filters При вызове функции можно найти все определенные хаки (hooks) и их параметры. Многие онлайн-ресурсы также содержат списки наиболее часто используемых хаков.

Как отладить код моего плагина для WordPress?

Во-первых, убедитесь, что у вас… wp-config.php В файле включен режим отладки. define( 'WP_DEBUG', true );Это позволит отображать ошибки и предупреждения PHP. Чтобы предотвратить видимость ошибочных сообщений для посетителей, их можно скрыть одновременно. define( 'WP_DEBUG_DISPLAY', false ); А также записывайте ошибки в файл журнала:define( 'WP_DEBUG_LOG', true );

Во-вторых, используйте error_log() Функция записывает пользовательские сведения о отладке в файл журнала. Для сложных структур данных (например, массивов, объектов) можно использовать сочетание различных методов для эффективной передачи информации в файл журнала. print_r() или var_dump() Информация должна выводиться только после входа в систему администратора, чтобы предотвратить её утечку. Для более эффективного отладки с использованием точек остановки и отслеживания стека вызовов функций рекомендуется использовать профессиональные инструменты отладки PHP, такие как Xdebug.