Изучение разработки плагинов для WordPress с нуля: создание пользовательских функций и расширений.

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

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

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

Понять базовую структуру плагина.

Самым важным файлом любого плагина является главный файл плагина. Этот файл должен содержать специальную заголовочную строку (plugin header), с помощью которой WordPress распознаёт ваш плагин. Заголовочная строка обычно находится в начале файла и включает в себя такую информацию, как название плагина, описание, версия, автор и т. д. Например, главный файл плагина под названием “Мой приветственный плагин” (My Greeting Plugin) может выглядеть следующим образом: my-greeting-plugin.php Начало может выглядеть следующим образом:

<?php
/**
 * Plugin Name: 我的问候插件
 * Plugin URI:  https://example.com/my-greeting-plugin
 * Description: 一个简单的插件,用于在网站前台显示问候语。
 * Version:     1.0.0
 * Author:      开发者名称
 * License:     GPL v2 or later
 * Text Domain: my-greeting-plugin
 */

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

Рекомендуемое чтение Начнем с нуля: создание вашего первого плагина для WordPress.

Каталог плагинов и организация файлов

Для плагинов с простыми функциями может быть достаточно одного PHP-файла. Однако по мере увеличения количества функций важна правильная организация кода. Типичная структура каталога плагина может включать следующие элементы:
- my-plugin/ (Главный каталог)
- my-plugin.php (Основной плагин)
- uninstall.php (Скрипт для удаления программы)
- includes/ Каталог, в котором хранятся классы или функции, обеспечивающие основные функциональные возможности программы.
- admin/ Каталог, в котором хранится код, связанный с администрированием сервера.
- public/ Каталог, в котором хранится код, связанный с пользовательским интерфейсом веб-сайта.
- assets/ Каталог, в котором хранятся ресурсы JavaScript, CSS и изображений.
- languages/ Каталог, в котором хранятся файлы с международными переводами

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

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

Основные концепции разработки: хендлеры (hooks) и фильтры (filters)

Ядро разработки плагинов для WordPress состоит из системы “хуков” (Hooks). Хуки позволяют вставлять собственный код в определенные моменты выполнения WordPress, тем самым изменяя или улучшая его стандартное поведение. Существует два основных типа хуков: хуки действий (Action Hooks) и хуки фильтров (Filter Hooks).

Использование действий-хуков (action hooks) для добавления новых функций

Акционные хуксы выполняются при наступлении определенных событий, таких как публикация статей, вход пользователей или загрузка страницы управления. Они не возвращают никаких значений вызывающему коду, а служат для выполнения определенных действий. Вы можете использовать их для автоматизации различных процессов в вашем приложении. add_action() Функция “загружает” свою собственную функцию в определенный хук (hook) действия (action hook).

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

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

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

Когда WordPress выполняет… wp_footer Когда будет определено местоположение, система автоматически вызовет функцию, зарегистрированную вами. myplugin_add_footer_text Функция.

Изменить содержимое с помощью хуков фильтра

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

Одним из распространенных примеров является изменение заголовков статей. Предположим, вы хотите автоматически добавлять символ товарного знака ™ в конце всех заголовков статей. Для этого можно воспользоваться соответствующими инструментами или скриптами. the_title Фильтр:

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且不是管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Здесь указаны параметры. 10 Это приоритет (чем меньше число, тем выше приоритет).2 Это означает, что наша функция-обратный вызов (callback function) принимает два параметра.$title и $post_id)。

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

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

Добавить меню высшего руководства.

Вы можете использовать add_menu_page() Функция создает отдельное меню для управления вашим плагином. Для её использования требуется несколько параметров, включая заголовок страницы, заголовок меню, права пользователя, псевдоним меню, функцию обратного вызова и другие параметры.

Рекомендуемое чтение Полное руководство по разработке плагинов для WordPress: от основ до практических советов

В следующем коде показано, как создать простую страницу с верхним меню:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',       // 所需权限(管理员)
        'myplugin-settings',    // 菜单别名(URL中的slug)
        'myplugin_settings_page', // 用于输出页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(使用Dashicons)
        30                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 定义输出页面内容的回调函数
function myplugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form action="/ru/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出设置字段和安全 nonce 字段
            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 настроек

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

Общий хостинг InterServer
Общий хостинг $2.50 USD в месяц, первый месяц $0.1 USD промо-код tryinterserver, 461 скрипт облачных приложений, установка в один клик.

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

function myplugin_settings_init() {
    // 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
    register_setting(
        'myplugin-settings', // 选项组,通常与页面别名一致
        'myplugin_options',  // 存储在 wp_options 表中的选项名
        'myplugin_sanitize_callback' // 可选的清理回调函数
    );

// 在页面中添加一个区域
    add_settings_section(
        'myplugin_section_main', // 区域的ID
        '主要设置',               // 区域标题
        'myplugin_section_callback', // 区域描述的回调函数
        'myplugin-settings'      // 页面别名
    );

// 向区域中添加一个字段
    add_settings_field(
        'myplugin_field_greeting', // 字段ID
        '问候语',                  // 字段标签
        'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
        'myplugin-settings',      // 页面别名
        'myplugin_section_main',  // 区域ID
        [ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
    $options = get_option( 'myplugin_options' );
    $value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
}

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

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

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

Никогда не доверяйте данным, введенным пользователем, или данным, полученным из базы данных. Перед обработкой любых данных необходимо выполнить их проверку (validation), очистку (sanitization) и обработку символов для предотвращения ошибок (escaping).

  • Проверка: проверяется, соответствуют ли данные ожидаемому формату или правилам (например, является ли адрес электронной почты действительным, содержатся ли только цифры и т. д.). Для этого могут использоваться такие функции, как… is_email()ctype_digit() Или регулярное выражение.
  • Очистка данных: перед сохранением данных в базу данных или их использованием в других целях необходимо удалять небезопасные или ненужные элементы. Для различных типов данных используются соответствующие функции очистки. sanitize_text_field()(Используется для текста)sanitize_email()(Для использования в адресах электронной почты)intval()(Используется для целых чисел.)
  • Эскапация: При выводе данных в HTML, JavaScript или URL необходимо обеспечить их безопасную кодировку, чтобы предотвратить атаки типа XSS (кросс-сайтового скриптинга). Для этого используются специальные функции. esc_html()esc_attr()esc_url() и wp_kses()

Например, при сохранении и выводе вариантов приветствий, которые мы создали ранее:

// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
    $sanitized = [];
    if ( isset( $input['greeting'] ) ) {
        // 清理文本输入
        $sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
    }
    return $sanitized;
}

// 在前台输出问候语时
function myplugin_display_greeting() {
    $options = get_option( 'myplugin_options' );
    $greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
    // 在输出到HTML前进行转义
    echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
}

Реализация поддержки международных языков

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

WordPress использует фреймворк GNU gettext для обработки переводов. Основные функции, отвечающие за перевод, находятся в ядре системы WordPress. __()(Используется для получения переведенного текста) и _e()Для вашего плагина необходимо задать уникальное текстовое доменное имя (Text Domain). Это имя уже было определено в заголовочном файле плагина.

В коде вы должны использовать это следующим образом:

// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );

// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );

// 带占位符的翻译
printf(
    __( '欢迎,%s!', 'my-greeting-plugin' ),
    esc_html( $username )
);

Затем вы можете использовать такой инструмент, как Poedit, чтобы извлечь эти строки из кода и сгенерировать необходимый результат. .pot Шаблонный файл, с помощью которого переводчики могут создавать тексты на разных языках. .po и .mo Файл должен быть помещён в плагин. /languages/ Внутри каталога.

резюме

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

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

Как минимум, какое количество файлов требуется для создания плагина для WordPress?

Для создания плагина достаточно всего одного PHP-файла. Если этот файл содержит необходимые комментарии, указывающие на его природу (так называемые «комментарии заголовка плагина» – Plugin Header Comments), WordPress сможет распознать его и активировать его в списке доступных плагинов. В этом одном файле может быть размещен весь код плагина.

Как предотвратить конфликты между названиями плагинов?

Чтобы предотвратить конфликты между именами функций, классов или констант и именами других плагинов или тем, следует использовать уникальные префиксы. Обычно такой префикс может быть основан на названии вашего плагина или его аббревиатуре. Например, если ваш плагин называется “Awesome Slider”, вы можете использовать префикс, связанный с этим названием. as_ или awesome_slider_ Это префикс, используемый перед всеми функциями и классами. Что касается имен классов, стоит рассмотреть более уникальные структуры именования в духе пространств имен (namespace).

Как очистить данные из базы данных при удалении плагина?

WordPress предоставляет два способа для выполнения очистительных операций при удалении плагинов. Первый способ заключается в регистрации хука (hook) для процесса удаления; это можно сделать в вашем основном файле плагина. register_uninstall_hook() Функция предусматривает использование обратного вызова (callback-функции) для удаления таблиц данных и настроек, созданных плагином. Второй, более рекомендуемый способ – это создание отдельного скрипта (или модуля) для выполнения этих действий. uninstall.php Файл. Когда пользователь удаляет плагин через веб-интерфейс WordPress, система автоматически выполняет код, содержащийся в этом файле. Вам необходимо проверить значения констант, определенных в этом файле. WP_UNINSTALL_PLUGIN Будут ли данные всех плагинов определены заранее, и затем удалены безопасным способом?

Как мне добавить файлы JavaScript и CSS в свой плагин?

Вам следует использовать функции очередей (queues), предоставляемые WordPress, для правильного добавления скриптов и таблиц стилей, вместо того чтобы выводить их непосредственно в HTML-код. <script> или <link> Метки. Для ресурсов фронтенда используются метки для их организации и управления. wp_enqueue_script() и wp_enqueue_style() Функции и их подключение к wp_enqueue_scripts Для ресурсов, находящихся в административной панели, они монтируются на соответствующие хук-функции (action hooks). admin_enqueue_scripts Всё находится на соответствующих крючках. Это обеспечивает правильное обработание зависимостей между компонентами системы и предотвращает многократную загрузку одних и тех же ресурсов.

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

Во-первых, убедитесь, что у вас… wp-config.php В файле включен режим отладки WordPress. WP_DEBUG Константа установлена на trueВы также можете включить все эти функции одновременно. WP_DEBUG_LOG(Записывать ошибки в файл) и WP_DEBUG_DISPLAY(На экране отображается ошибка.) Используйте это. error_log() Функция записывает пользовательские сведения о дебагировании в серверный журнал ошибок. Кроме того, для отладки JavaScript-кода и AJAX-запросов можно использовать консоль и сетевой модуль разработческих инструментов браузера. Для более сложных логических операций рекомендуется применять профессиональные инструменты для отладки PHP, такие как Xdebug.