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

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

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

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

Во-первых, вам понадобится локальная серверная среда, способная работать с WordPress. Рекомендуется использовать интегрированные пакеты для настройки сервера, такие как Laragon, XAMPP или Local by Flywheel. Эти инструменты позволяют одним кликом установить Apache/Nginx, PHP и MySQL, избавляя вас от необходимости выполнения сложных настроек. Убедитесь, что версия PHP совместима с текущей стандартной версией WordPress; обычно рекомендуется использовать PHP 7.4 или более новые версии. Кроме того, в разделе “Инструменты” → “Проверка состояния сайта” в интерфейсе WordPress проверьте, нет ли проблем, которые могли бы помешать разработке плагинов.

Во-вторых, важно выбрать мощный кодовый редактор. Visual Studio Code является очень популярным вариантом: он легкий в использовании, бесплатен и обладает большим количеством расширений (плагинов), таких как PHP Intelephense (предоставляющий интеллектуальные советы по коду) и WordPress Snippet (наборы готовых фрагментов кода). Еще одним классическим редактором является PhpStorm, который обеспечивает более глубокую интеграцию с системой разработки WordPress, однако он является платным программным продуктом.

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

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

Ультахост (UltaHost) – хостинг-провайдер, предоставляющий услуги хостинга для сайтов, построенных на платформе WordPress.
Гарантия возврата средств в течение 30 дней, неограниченная пропускная способность интернет-канала и объем баз данных, бесплатная защита от DDoS-атак. При покупке на срок 3 лет предоставляется скидка в размере 501 ТБ до 4 ТБ.
// 启用 WordPress 调试模式
define( 'WP_DEBUG', true );
// 将错误记录到 /wp-content/debug.log 文件
define( 'WP_DEBUG_LOG', true );
// 在页面上显示错误(开发环境推荐,生产环境必须关闭)
define( 'WP_DEBUG_DISPLAY', true );

Создайте свой первый файл плагина.

В WordPress-плагинах может быть всего один файл. Однако все плагины должны храниться в определенной директории на сервере./wp-content/plugins/Каждый плагин может иметь собственный подкаталог, что помогает в организации более сложной структуры кода.

Примечания к заголовочному разделу плагина

Каждый основной файл плагина должен начинаться стандартизированными комментариями в заголовочном файле PHP – именно так WordPress распознает информацию о плагинах. Создайте новый файл и назовите его…my-first-plugin.phpИ поместить в…/wp-content/plugins/my-first-plugin/Файл находится в папке. Содержимое файла следующее:

<?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. Среди прочего:Text DomainиDomain PathПредназначено для подготовки плагинов к работе с международным форматированием текста (i18n – Internationalization).

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

Теперь давайте добавим к этому плагину простую функцию: автоматическое вставление строки пользовательского текста в конце содержимого статьи. Для этого мы воспользуемся возможностями WordPress.the_contentФильтр-хук. Тот, который вы только что создали…my-first-plugin.phpНиже комментариев в заголовке файла добавьте следующую функцию:

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

// 在文章内容末尾添加自定义文本
function my_first_plugin_add_footer_text( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $footer_text = '<p><em>Спасибо за чтение! Эта статья представлена вам “Моим первым плагином”.</em></p>';
        $content .= $footer_text;
    }
    return $content;
}
add_filter( 'the_content', 'my_first_plugin_add_footer_text' );

После сохранения файла войдите в панель управления WordPress, перейдите на страницу “Плагины” (Plugins), и там вы увидите плагин с названием “Мой первый плагин” (My First Plugin). Активируйте его, затем просмотрите любую статью в блоге — в нижней части статьи должен быть добавлен текст, который мы задали.

Использование основного API WordPress

При дальнейшей разработке вы будете часто взаимодействовать с различными API, предоставляемыми WordPress. Среди них наиболее важной является система “хуков” (Hooks), которая включает в себя “действия” (Actions) и “фильтры” (Filters).

Понимание действий, связанных с использованием хуков (action hooks)

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

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%
// 定义文章发布时执行的动作函数
function my_first_plugin_log_post_published( $post_id, $post ) {
    // 避免无限循环和非文章类型
    if ( wp_is_post_revision( $post_id ) || $post->post_type != ‘post’ ) {
        return;
    }
    // 记录日志
    error_log( “文章 ID {$post_id} 已发布,标题为:{$post->post_title}” );
}
// 将函数挂载到 publish_post 动作钩子上
add_action( ‘publish_post’, ‘my_first_plugin_log_post_published’, 10, 2 );

функцияadd_actionТретий параметр — это приоритет (по умолчанию 10); чем меньше число, тем выше приоритет. Четвертый параметр — это количество аргументов, принимаемых функцией.

Понимание работы фильтровых хуков (filter hooks)

Фильтровые хаки (filter hooks) используются для изменения данных. В разделе “Создание вашего первого плагина” мы именно их и применили.the_contentЭто просто фильтр-хук (filter hook). Он принимает исходный текст и позволяет вам его изменить перед тем, как вернуть результат обработки. Еще один распространенный пример использования такого хука — изменение длины резюме статьи.

// 修改摘要的默认字数
function my_first_plugin_custom_excerpt_length( $length ) {
    return 30; // 将摘要字数改为30字
}
add_filter( ‘excerpt_length’, ‘my_first_plugin_custom_excerpt_length’ );

Добавить меню входа

Для взаимодействия с пользователями нам часто необходимо добавить страницу меню в боковую панель управления в бэкенде WordPress. Это можно сделать следующим образом:add_menu_pageРеализация функции: Приведённый ниже код добавляет страницу настроек на верхнем уровне для плагина.

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

// 创建插件管理菜单
function my_first_plugin_add_admin_menu() {
    add_menu_page(
        ‘我的第一个插件设置’, // 页面标题
        ‘我的插件’,           // 菜单标题
        ‘manage_options’,     // 所需权限
        ‘my-first-plugin’,    // 菜单slug
        ‘my_first_plugin_settings_page’, // 回调函数,用于输出页面内容
        ‘dashicons-admin-plugins’, // 图标(可选)
        100                    // 菜单位置(可选)
    );
}
add_action( ‘admin_menu’, ‘my_first_plugin_add_admin_menu’ );

// 设置页面的回调函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="“wrap”">
        <h1>Настройки моего первого плагина</h1>
        <p>Это страница настроек плагина. В будущем вы сможете добавлять сюда формы и опции.</p>
    </div>
    &lt;?php
}

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

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

Проверка и эскапирование данных

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

Общий хостинг InterServer
Общий хостинг $2.50 USD в месяц, первый месяц $0.1 USD промо-код tryinterserver, 461 скрипт облачных приложений, установка в один клик.
  • Экранирующий вывод (escape output): используйте.esc_html()esc_attr()esc_url()иwp_kses_post()Функции типа `escape` используются для обработки данных в зависимости от контекста – они помогают избежать неправильного отображения символов или ошибок при передаче данных.
  • Проверьте введенные данные: используйте этот инструмент для проверки.sanitize_text_field()sanitize_email()intval()Функции предназначены для очистки данных, предоставленных пользователем в форме.

Например, при настройке обработки данных формы на странице:

$user_input = $_POST[‘some_field’] ?? ‘’; // 使用空合并运算符提供默认值
$clean_input = sanitize_text_field( $user_input ); // 清理数据
update_option( ‘my_plugin_option’, $clean_input ); // 安全存储

Использование нестандартных методов проверки (не основанных на стандартах CE) и проверки прав доступа

При обработке запросов форм (особенно тех, которые поступают из файлов admin-ajax.php или admin-post.php) необходимо использовать определенные правила или инструменты.wp_verify_nonce()Для проверки законности запроса и предотвращения атак типа CSRF (Cross-Site Request Forgery). Кроме того, используется…current_user_can()Проверьте, имеет ли текущий пользователь права на выполнение данной операции.

function my_first_plugin_handle_form_submit() {
    // 1. 检查nonce
    if ( ! isset( $_POST[‘my_nonce_field’] ) || ! wp_verify_nonce( $_POST[‘my_nonce_field’], ‘my_action’ ) ) {
        wp_die( ‘安全校验失败!’ );
    }
    // 2. 检查权限
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘权限不足!’ );
    }
    // 3. 安全地处理数据…
}

Организация кода и интернационализация

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

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

$message = __( ‘感谢阅读!本文由“我的第一个插件”为您呈现。’, ‘my-first-plugin’ );

Затем вы можете использовать такие инструменты, как Poedit, для создания нужного контента..potШаблонный файл, предназначенный для создания переводов на разные языки переводчиками..moДокумент.

резюме

С помощью этого руководства вы завершили основной этап создания плагина для WordPress с нуля. Вы научились настраивать среду разработки, создавать файлы плагинов с стандартными заголовочными комментариями, а также использовать мощную систему хуков (actions и filters) WordPress для добавления новых функций. Мы также рассмотрели, как безопасно добавлять меню для управления плагином, обрабатывать данные и подчеркнули важность безопасности и интернационализации. Разработка плагинов – это процесс постоянного обучения и практики; ключевым моментом является понимание работы системы хуков WordPress и правил безопасности. Теперь вы можете попробовать разработать более сложные функции, такие как создание пользовательских таблиц в базе данных, добавление шорткодов (shortcodes), вставок (widgets) или REST API-шлюзов, постепенно создавая полнофункциональные и надежные коммерческие плагины.

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

Должен ли плагин находиться в отдельной папке?

Нет, плагин может быть просто отдельным модулем (компонентом программы)..phpФайлы можно просто разместить в нужном месте./wp-content/plugins/Файлы находятся в соответствующем каталоге. Однако для плагинов, которые содержат несколько файлов, ресурсов (например, JS- и CSS-файлов) или требуют перевода, настоятельно рекомендуется использовать отдельную папку для хранения всех связанных файлов. Это позволит сделать структуру проекта более четкой и упростить управление им.

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

WordPress предоставляет очень удобный API для работы с настройками (опциями). Вы можете им пользоваться для изменения параметров сайта.add_option()get_option()иupdate_option()Существуют функции для добавления, получения и обновления настроек плагинов. Эти данные хранятся в безопасном виде в системе WordPress.wp_optionsВ таблицах базы данных. Для больших объемов структурированных данных можно рассмотреть возможность их сериализации в виде массивов или строк в формате JSON перед хранением.

Может ли мой разработанный плагин конфликтовать с другими плагинами?

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

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

Это зависит от ваших целевых пользователей. Как правило, рекомендуется сделать плагин совместимым с текущей основной версией программы, а также с одной или двумя предыдущими версиями. Вы можете это сделать внутри кода плагина…readme.txtФайл был успешно обработан (или прочитан).Requires at least:Необходимо указать минимально требуемую версию WordPress для использования определённых функций или возможностей. В процессе разработки следует избегать использования функций, доступных только в более новых версиях WordPress.function_exists()Проводится проверка совместимости с целью расширения сферы применения плагина.