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

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

Подготовка и настройка окружения

Прежде чем начинать писать код, вам понадобится подходящая среда разработки. К ней относятся локальная установка WordPress, кодовый редактор, а также базовые знания PHP. Для создания локальной среды разработки рекомендуется использовать такие инструменты, как XAMPP, MAMP или Local by Flywheel – они позволяют быстро настроить на вашем компьютере серверную среду с поддержкой PHP и MySQL.

Создание базового каталога и файлов для плагина

Каждый плагин для WordPress должен иметь главный файл, который является точкой входа в работу плагина. Сначала вам необходимо создать этот главный файл внутри структуры плагина. wp-content/plugins Создайте новую папку в каталоге, например, my-first-pluginЗатем внутри этой папки создайте основной PHP-файл, который, как правило, носит то же имя, что и папка. my-first-plugin.php

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

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

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习 WordPress 插件开发的示例插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

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

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

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

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

Написание основного кода на PHP

Вся логика работы плагинов реализуется с помощью PHP-кода. WordPress предоставляет множество инструментов и возможностей для создания и настройки плагинов.动作钩子и过滤器钩子Это основа взаимодействия плагинов с ядром WordPress.

Реализация простой функции, представленной в виде короткого кода

Краткие коды (shortcodes) – это мощный инструмент, позволяющий пользователям легко вставлять функции плагинов в статьи или страницы. Давайте реализуем простой краткий код, который отображает приветствие на странице.

В вашем главном файле… my-first-plugin.php Под заголовочными комментариями добавьте следующие функции и хаки:

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

// 注册短代码
function mfp_greeting_shortcode( $atts ) {
    // 使用 shortcode_atts 设置默认参数并合并用户传入的参数
    $atts = shortcode_atts( array(
        'name' =&gt; '访客',
    ), $atts, 'mfp_greeting' );

// 返回要显示的内容
    return '<p>Здравствуйте, '. esc_html($atts['name'])'. ‘! Добро пожаловать в использование моего первого плагина.</p>'add_shortcode( 'mfp_greeting', 'mfp_greeting_shortcode' );

Теперь пользователи могут вводить текст в редакторе статей. [mfp_greeting name=“小明”]На переднем интерфейсе будет отображаться следующее сообщение: “Здравствуй, Сяомин! Добро пожаловать в использование моего первого плагина.”

Добавьте опцию настройки в бэкенд.

Чтобы функции плагина были настраиваемыми, обычно необходимо добавить страницу настроек. Здесь показано, как добавить подменю в меню “Настройки”.

Во-первых, мы используем… add_action Крючки регистрируются и настраиваются во время инициализации системы администратором.

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%
// 初始化插件设置
function mfp_settings_init() {
    // 注册一个新的设置 section
    add_settings_section(
        'mfp_settings_section', // section ID
        '我的插件设置', // 标题
        'mfp_settings_section_callback', // 回调函数,用于输出 section 描述
        'general' // 显示在哪个设置页,这里是“常规”设置页
    );

// 在 section 内注册一个字段
    add_settings_field(
        'mfp_default_greeting', // 字段 ID
        '默认问候人名', // 字段标题
        'mfp_default_greeting_callback', // 渲染字段输入框的回调函数
        'general', // 设置页面
        'mfp_settings_section' // 所属 section
    );

// 在 WordPress 的 `option` 表中注册这个设置
    register_setting( 'general', 'mfp_default_greeting' );
}
add_action( 'admin_init', 'mfp_settings_init' );

Затем определите две вышеупомянутые обратные вызовы (callback-функции), необходимые для отображения интерфейса:

// Section 描述的回调函数
function mfp_settings_section_callback() {
    echo '<p>Здесь я настраиваю параметры своего первого плагина.</p>';
}

// 字段输入框的回调函数
function mfp_default_greeting_callback() {
    // 从数据库获取已保存的值,如果没有则使用默认值
    $option = get_option( 'mfp_default_greeting', 'WordPress 用户' );
    // 输出一个输入框
    echo '<input type="text" name="mfp_default_greeting" value="' . esc_attr( $option ) . '" />';
}

Теперь вы можете увидеть этот параметр настроек в нижней части страницы “Настройки → Общие” в области управления WordPress.

Управление ресурсами фронтенда и взаимодействие с Ajax

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

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

Безопасное загрузка CSS и JavaScript

Никогда не следует напрямую вносить изменения в ваши PHP-файлы. <link> или <script> Ресурсные пути должны быть хардкодированы в тегах. Для этого следует использовать соответствующие методы и подходы. wp_enqueue_style и wp_enqueue_script Функция.

// 注册并加载前端资源
function mfp_enqueue_public_assets() {
    // 加载一个 CSS 文件
    wp_enqueue_style(
        'mfp-public-style', // 样式表句柄
        plugin_dir_url( __FILE__ ) . 'assets/css/public-style.css', // 样式表 URL
        array(), // 依赖项
        '1.0.0' // 版本号,可用于清除缓存
    );

// 加载一个 JavaScript 文件
    wp_enqueue_script(
        'mfp-public-script', // 脚本句柄
        plugin_dir_url( __FILE__ ) . 'assets/js/public-script.js', // 脚本 URL
        array( 'jquery' ), // 依赖项,这里依赖 jQuery
        '1.0.0',
        true // 是否在页面底部加载
    );

// 重要:将 PHP 变量安全地传递到 JavaScript
    wp_localize_script(
        'mfp-public-script',
        'mfp_ajax_object', // 在 JS 中访问的对象名
        array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => wp_create_nonce( 'mfp_ajax_nonce' ),
            'default_name' => get_option( 'mfp_default_greeting', 'WordPress 用户' )
        )
    );
}
// 在前端页面加载资源
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_public_assets' );
// 在后台管理页面加载资源(如果需要)
// add_action( 'admin_enqueue_scripts', 'mfp_enqueue_admin_assets' );

Реализация простого Ajax-запроса

Ajax позволяет взаимодействовать с сервером без обновления страницы. В WordPress предусмотрен встроенный обработчик Ajax-запросов.

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

Во-первых, в файле JavaScript на стороне клиента… public-script.js Отправляется запрос на сервер:

jQuery(document).ready(function($) {
    $('#my-button').on('click', function(e) {
        e.preventDefault();
        $.post(
            mfp_ajax_object.ajax_url, // WordPress 提供的 Ajax URL
            {
                action: 'mfp_get_server_time', // 触发的 PHP 钩子标识
                nonce: mfp_ajax_object.nonce, // 安全随机数
            },
            function(response) {
                if (response.success) {
                    $('#result-container').html('服务器时间:' + response.data);
                } else {
                    alert('请求失败:' + response.data);
                }
            }
        );
    });
});

Затем на стороне PHP обрабатывается этот запрос. Необходимо создать отдельные функции для регистрации пользователей, вошедших в систему, и пользователей, не вошедших в систему (или же функции, которые могут работать как для одних, так и для других пользователей).

// 处理 Ajax 请求的函数
function mfp_ajax_get_server_time() {
    // 验证 nonce,防止 CSRF 攻击
    check_ajax_referer( 'mfp_ajax_nonce', 'nonce' );

// 处理逻辑
    $server_time = current_time( 'mysql' );

// 返回成功响应(JSON 格式)
    wp_send_json_success( $server_time );
}
// 为登录用户注册处理函数
add_action( 'wp_ajax_mfp_get_server_time', 'mfp_ajax_get_server_time' );
// 为未登录用户注册处理函数(如果功能允许)
add_action( 'wp_ajax_nopriv_mfp_get_server_time', 'mfp_ajax_get_server_time' );

Интернационализация плагинов и подготовка к их публикации

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

Для реализации перевода текста используется функция gettext.

WordPress использует фреймворк GNU gettext для перевода. Все пользовательские текстовые строки необходимо обернуть в специальные функции.

Измените предыдущую функцию-короткий код, чтобы она поддерживала перевод.

function mfp_greeting_shortcode_i18n( $atts ) {
    $atts = shortcode_atts( array(
        'name' =&gt; __( '访客', 'my-first-plugin' ), // 默认值也可翻译
    ), $atts, 'mfp_greeting' );

// 使用 sprintf 和 __ 函数组合翻译字符串
    return '<p>' . sprintf( __( '你好,%s!欢迎使用我的第一个插件。', 'my-first-plugin' ), esc_html( $atts['name'] ) ) . '</p>'add_shortcode( 'mfp_greeting', 'mfp_greeting_shortcode_i18n' );

Вам необходимо использовать такие инструменты, как Poedit, чтобы сканировать все элементы в плагине, которые соответствуют определённым критериям (например, содержат определённые текстовые фрагменты, имеют определённую структуру и т. д.). __(‘文本’, ‘my-first-plugin’) Создание строки… .pot Шаблонный файл, затем для каждого языка (например, китайского) создается соответствующий вариант этого файла. .po И после компиляции .mo Файл, и поместите его туда. /languages Каталог.

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

Перед публикацией плагина обязательно выполните следующие проверки:
1. 功能测试:在全新的 WordPress 安装上激活插件,测试所有功能(短代码、设置、Ajax等)是否按预期工作。
2. 代码审查:检查所有用户输入是否都使用了 esc_html, esc_attr, wp_kses_post Необходимо использовать функции для безопасной обработки строк (например, функции санкционированного экранирования). Применяются ли они при всех базовых запросах к базе данных? $wpdb Классы содержат предварительные операции (запретительные команды), предназначенные для предотвращения взлома системы с использованием метода SQL-инъекций.
3. 性能检查:确保脚本和样式只在需要的页面加载(可以使用条件标签如 is_admin(), is_single() Необходимо избегать выполнения ненужных запросов к базе данных при каждом загрузке страницы.
4. 文件清理:删除开发过程中使用的调试代码、多余的注释和未使用的文件。
5. README 文件:创建一个详细的 readme.txt Файл должен соответствовать формату, предусмотренному сайтом WordPress.org; он должен содержать описание плагина, инструкции по его установке, ответы на часто задаваемые вопросы и другую важную информацию. Этот файл является обязательным для подачи плагина в официальный каталог WordPress.

резюме

С помощью этого руководства вы прошли путь от создания пустого файла до разработки полноценного WordPress-плагина, обладающего функциями использования сокращенных кодов, настройки серверной части, загрузки фронтенд-ресурсов, взаимодействия через Ajax и поддержки международизации. Основные шаги включали: настройку среды разработки и создание главного файла с стандартными заголовками; использование хуков действий (action hooks) и хуков фильтров (filter hooks) для внедрения необходимых функций; безопасное управление ресурсными файлами; реализацию асинхронной связи между серверной и клиентской частью приложения; а также подготовку плагина к публикации во всем мире с учетом необходимости перевода и тестирования. Помните, что безопасность (эскапирование данных, проверка входных данных, использование токенов безопасности – nonce), производительность (загрузка ресурсов по мере необходимости) и соблюдение стандартов разработки WordPress (соответствие спецификациям кодирования) являются трьмя ключевыми аспектами при создании качественных плагинов. Продолжайте изучать и практиковаться в использовании более продвинутых API-инструментов, таких как пользовательские типы статей, REST API и редакторы на основе технологии Blocks – это сделает ваш плагин еще мощнее.

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

Для разработки плагинов обязательно необходимо использовать объектно-ориентированное программирование?

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

Как отладить проблемы в плагинах для WordPress?

Прежде всего, убедитесь, что в wp-config.php Файл открыт в приложении WP_DEBUG и WP_DEBUG_LOG Используйте константы; так информация об ошибках будет правильно сохранена. /wp-content/debug.log Эти данные хранятся в файле, но не отображаются пользователю. Кроме того, их можно использовать в нужных целях. error_log() Функция выводит значения переменных в логи. Для работы с Ajax или сложными логическими алгоритмами панели “Сеть” (Network) и “Консоль” (Console) в разработческих инструментах браузера являются неотъемлемыми инструментами для отладки.

Как мой плагин совместим с темами и другими плагинами?

Лучшая практика соблюдения совместимости с системой WordPress заключается в следующем: строго соблюдении официального API и стандартов кодирования WordPress; присвоении уникальных префиксов именам ваших функций, классов и хуков (action hooks). mfp_Чтобы избежать конфликтов, перед использованием любых глобальных переменных или функций необходимо проверить их наличие (используйте соответствующие проверочные механизмы). function_exists() или class_exists()Кроме того, необходимо четко описать в документации таблицы базы данных, созданные вашим плагином.选项или 用户元数据

Какие требования предъявляются к плагинам, предназначенным для загрузки в каталог WordPress.org?

Вам необходимо иметь аккаунт на WordPress.org и убедиться, что плагин полностью соответствует официальным требованиям. Это включает в себя: код, совместимый с лицензией GPL (обычно это GPLv2+); плагин должен быть полностью открытым и не зависеть от внешних платных сервисов для выполнения основных функций; содержать стандартные форматы. readme.txt В файле и коде нет вредоносного или нежелательного содержимого; кроме того, материал прошел проверку команды по ручному аудиту. Перед отправкой обязательно тщательно ознакомьтесь с официальным руководством по разработке плагинов и руководством по подаче заявок.