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

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

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

Прежде чем начинать писать код, необходимо убедиться, что ваша среда разработки настроена правильно. Хорошая локальная среда разработки значительно повышает эффективность работы и удобство отладки программ.

Во-первых, вам необходимо установить на своем локальном компьютере среду веб-сервера – такую среду обычно называют “локальной серверной средой”. Одними из наиболее популярных вариантов являются XAMPP и MAMP, которые объединяют в себе сервер Apache, базу данных MySQL/MariaDB и язык программирования PHP. Еще один эффективный вариант – использование технологии Docker для создания среды, близкой к производственной. Независимо от выбранного варианта, убедитесь, что версия PHP (рекомендуется 7.4 или более) и версия MySQL совместимы с большинством хостинговых сервисов для WordPress.

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

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

Наконец, и что самое важное: подготовьте кодовый редактор. Рекомендуем использовать такие инструменты, как Visual Studio Code, PhpStorm или Sublime Text, которые обеспечивают выделение кода, интеллектуальные советы и возможности отладки. Особенно это важно при разработке на PHP, поскольку эти функции помогают избежать множества простых синтаксических ошибок.

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

Основная структура плагина и главный файл

Плагин для WordPress имеет стандартную и обязательную структуру файлов; его ядро расположено в определенном месте этой структуры. /wp-content/plugins/ Папка с тем же именем, находящаяся в данном каталоге, а также основной PHP-файл, находящийся внутри этой папки.

Создание основного файла плагина

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

Этот основной файл является “входной точкой” для плагина; WordPress определяет метаданные плагина, считывая информацию, содержащуюся в его заголовочном блоке (plugin header), который находится в начале файла. Заголовочный блок представляет собой стандартный блок комментариев на PHP и должен быть размещен в самом начале файла. В нем обязательно должны быть указаны название плагина и его описание.

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

В приведённом выше коде…Plugin Name Это обязательные поля; остальные поля являются необязательными, но их рекомендуется заполнить. Эта информация будет отображаться на странице управления плагинами в бэкенде WordPress.Text Domain Используется для обеспечения международной поддержки (поддержки нескольких языков) и совпадает с текстовыми полями, которые используются при последующих вызовах функций перевода.

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

Определение основных констант плагина

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

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

// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 如果 ABSPATH 未定义,则退出
}

// 定义插件路径和URL常量
define( 'MFP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'MFP_PLUGIN_VERSION', '1.0.0' );

Здесь,plugin_dir_path( FILE ) и plugin_dir_url( FILE ) Это встроенная функция WordPress, позволяющая безопасно получить путь к каталогу и URL текущего плагина.MFP_PLUGIN_VERSION Константы используются для хранения версий плагинов, что облегчает использование этих версий при включении стилей скриптов или при сравнении версий плагинов между собой.

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%

Реализация основных функций и использование хуков (hooks)

Суть разработки плагинов для WordPress заключается в использовании системы “хуков” (Hooks). Существует два типа хуков: действия (Actions) и фильтры (Filters). Они позволяют вставлять свой код в определенные моменты выполнения WordPress-системы (например, при загрузке страницы или сохранении статьи) или изменять данные, возвращаемые другими функциями.

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

Давайте реализуем самую простую функцию: добавим строку текста в нижнюю часть страницы веб-сайта. Для этого мы используем действия-хаки (action hooks). wp_footerОно будет вызвано перед выводом HTML-кода в области подвала (footer) страницы.

Добавьте функцию в главный файл, а затем используйте её в других файлах программы. add_action Функция осуществляет её монтирование (то есть присоединяет к нужному объекту или системному компоненту). wp_footer На этом крючке.

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

/**
 * 在网站页脚输出自定义文本
 */
function mfp_display_footer_text() {
    echo '<p style="text-align: center; color: #666;">Спасибо, что используете мой первый плагин для WordPress!</p>';
}
add_action( 'wp_footer', 'mfp_display_footer_text' );

Теперь активируйте свой плагин и перейдите на фронтенд веб-сайта. Прокрутите страницу вниз — вы должны увидеть этот текст. Вот так используется базовый механизм действий-хаков (action hooks): выполнение определенной операции в определенный момент времени.

Используйте фильтры для изменения содержимого.

Фильтры используются для изменения уже существующих значений. Например, если мы хотим изменить заголовки статей, добавив перед ними текст “【Рекомендуется】”, это можно сделать с помощью фильтров. the_title Фильтры используются для реализации этой функции.

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

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

/**
 * 在所有文章标题前添加前缀
 * @param string $title 原始标题
 * @return string 修改后的标题
 */
function mfp_add_prefix_to_title( $title ) {
    // 确保只在主循环中修改,避免影响后台列表等其他地方
    if ( is_single() && in_the_loop() ) {
        $title = '【推荐】' . $title;
    }
    return $title;
}
add_filter( 'the_title', 'mfp_add_prefix_to_title' );

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

Добавление страницы управления и мер по обеспечению безопасности

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

Страница настроек для создания плагина

Мы будем использовать… add_menu_page Функция позволяет добавить в плагин верхний управляющий меню и соответствующую страницу настроек.

Во-первых, создайте функцию для генерации HTML-контента страницы настройок, а затем примените её путем монтирования (mounting) на соответствующий элемент интерфейса. admin_menu Функция-джекет действий используется для регистрации этого меню.

/**
 * 渲染插件设置页面的HTML内容
 */
function mfp_render_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( '你没有足够的权限访问此页面。', 'my-first-plugin' ) );
    }
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <p>Это страница настроек моего первого плагина. В будущем здесь можно будет добавлять формы и опции.</p>
        <form action="/ru/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 后续可以在这里添加设置字段
            // settings_fields( 'mfp_options_group' );
            // do_settings_sections( 'mfp-settings-page' );
            // submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

/**
 * 注册插件管理菜单
 */
function mfp_add_admin_menu() {
    add_menu_page(
        &#039;我的第一个插件设置&#039;, // 页面标题
        &#039;我的插件&#039;,          // 菜单标题
        &#039;manage_options&#039;,    // 所需权限 (manage_options)
        &#039;mfp-settings-page&#039;, // 菜单slug
        &#039;mfp_render_settings_page&#039;, // 回调函数
        &#039;dashicons-admin-plugins&#039;, // 图标 (Dashicons)
        80                   // 菜单位置
    );
}
add_action( &#039;admin_menu&#039;, &#039;mfp_add_admin_menu&#039; );

После активации плагина с левой стороны панели управления WordPress появится новый пункт меню “Мои плагины”. Нажав на него, вы перейдете на простую страницу настроек. Здесь предусмотрен интерфейс для добавления полей форм с использованием API настроек WordPress – это стандартный способ безопасной обработки пользовательских вводимых данных.

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

Любые данные, получаемые от пользователей или передаваемые в браузер, должны подвергаться обработке с целью предотвращения атак типа XSS (кросс-сайтского скриптинга) и SQL-инъекций. WordPress предоставляет множество функций для обеспечения безопасности.

  • Экранирующий вывод (escape output): используйте. esc_html()esc_attr()esc_url() и wp_kses_post() Используйте такие функции, чтобы очистить содержимое, предназначенное для отображения в HTML.
  • Проверка данных: использование sanitize_text_field()sanitize_email() Используйте такие функции, чтобы очистить данные, отправленные из формы.
  • Не-CE-ключ: Для операций с формами, влияющих на изменение данных, использование этого ключа обязательно. wp_nonce_field() и wp_verify_nonce() Необходимо проверить законность данного запроса.

Безопасность является основополагающим принципом при разработке плагинов, и хорошие практики должны быть соблюдаемы с самого начала работы над проектом.

резюме

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

Этот простой плагин уровня “Hello World” уже содержит все основные элементы, необходимые коммерческим плагинам: стандартную структуру, использование хуков (hooks), интерфейс для работы с данными в бэкенде и меры безопасности. Исходя из этого, вы можете начать разработку более сложных плагинов, интегрируя API настроек WordPress (Settings API), создавая собственные таблицы в базе данных или используя более сложные скрипты и утилиты. Помните, что постоянное изучение официальных руководств по разработке и анализ кода качественных открытых исходных плагинов – это лучший способ улучшить свои навыки.

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

Как отладить мой плагин для WordPress (####)?
Первым шагом является включение режима отладки в WordPress. В вашем случае… wp-config.php В документе будет указано, что... WP_DEBUG Значение константы установлено как… trueВы также можете настроить другие параметры. WP_DEBUG_LOG Для… trueЗаписать информацию об ошибке в… /wp-content/debug.log В файле необходимо предотвратить прямое отображение ошибочных сообщений на странице, чтобы это не повлияло на пользователей.

Кроме того, использование панелей Console и Network в разработческих инструментах браузера (нажатие клавиши F12) для отображения ошибок JavaScript и информации об API-запросах, а также интеграция инструментов отладки PHP (например, Xdebug) с вашим кодовым редактором (таким как VS Code) для выполнения операций остановки выполнения программы на определённых точках является очень эффективными методами профессиональной отладки.

Почему при активации моего плагина появляется сообщение об “фатальной ошибке”?

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

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

Как сделать так, чтобы мой плагин поддерживал несколько языков (интернационализацию)?

WordPress использует фреймворк GNU gettext для реализации функций интернационализации (i18n) и локализации (l10n). В первую очередь, как указано в учебных материалах, необходимо правильно настроить соответствующие параметры в заголовочных файлах основного кода программы. Text Domain(Например, my-first-pluginи Domain Path

В коде плагина все строки, которые необходимо перевести, должны быть обернуты в функцию перевода. Например:__( ‘文本’, ‘my-first-plugin’ ) или _e( ‘文本’, ‘my-first-plugin’ )Затем используйте такой инструмент, как Poedit, чтобы сканировать эти строки в коде, сгенерировать файл шаблона с расширением .pot, а также создать файлы с расширениями .po и .mo для соответствующего языка (например, китайский zh_CN) и разместить их в нужном месте. /languages/ Внутри каталога.

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

Никогда не следует напрямую составлять SQL-запросы на основе пользовательских вводимых данных. Для работы с базой данных необходимо использовать классы, предоставляемые WordPress. $wpdbОно предоставляет такие возможности, как… $wpdb->prepare() Такой подход позволяет безопасно обрабатывать SQL-запросы с использованием предварительно подготовленных строк (prepared statements), что эффективно предотвращает возможность внедрения вредоносного кода (SQL-инъекций).

Например, запрос данных следует формулировать следующим образом:

global $wpdb;
$user_input = $_POST['some_input'];
$safe_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}table WHERE column = %s", $user_input );
$results = $wpdb->get_results( $safe_query );

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