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

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

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

Прежде чем начинать писать код, вам необходимо убедиться, что у вас есть подходящая среда разработки. К ней относятся локальная установка WordPress и кодовый редактор. Локальная среда позволяет свободно тестировать и настраивать код, не влияя на работу веб-сайта в реальном времени. Среди популярных программ для локальной разработки — Local by Flywheel, XAMPP и MAMP.

Вам нужно придумать уникальное название для вашего плагина; это название будет использоваться как для названия главной директории плагина, так и для названия его основного файла. Например, если ваш плагин называется “Hello World”, то ваш основной файл плагина может быть назван… hello-world.phpУбедитесь, что название и описание вашего плагина являются уникальными в каталоге плагинов WordPress. Это поможет избежать конфликтов с другими плагинами.

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

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

Создание первого плагина

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

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

Напишите заголовок плагина.

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

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习和演示的简单 WordPress 插件。
 * Version:           1.0.0
 * Requires at least: 5.2
 * Requires PHP:      7.2
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Сохраните этот код в новый PHP-файл, например, под названием `my_script.php`. my-first-plugin.phpЗатем поместите этот файл в каталог вашей локальной установки WordPress. wp-content/plugins Плагин находится в указанной папке. Теперь, перейдя на страницу “Плагины” в области управления WordPress, вы увидите в списке новый плагин под названием “Мой первый плагин” и сможете его активировать. На данный момент у этого плагина нет никаких функций.

Добавление базовых функций к плагину

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

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

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

/**
 * 在文章内容末尾添加自定义文本
 *
 * @param string $content 当前文章内容。
 * @return string 修改后的文章内容。
 */
function mfp_add_footer_text( $content ) {
    // 仅针对主循环中的单个文章页面
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Спасибо, что прочитали эту статью, представленную проектом “Мой первый плагин”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
// 将自定义函数挂载到 `the_content` 过滤器上
add_filter( 'the_content', 'mfp_add_footer_text' );

Этот код определяет объект с именем… mfp_add_footer_text Функция, которая принимает содержимое статьи… $content В качестве параметра. Внутри функции сначала используются условные теги (conditional tags).is_single(), in_the_loop(), is_main_query()Этот процесс обеспечивает то, что изменения вносятся только в основном цикле страницы конкретной статьи, не влияя на другие страницы, такие как главная страница или архив. Затем создается пользовательский текст на HTML-языке, который добавляется после оригинального содержимого статьи. В итоге… add_filter Функция позволяет “присоединить” эту пользовательскую функцию к системе WordPress. the_content На фильтре.

После сохранения файла обновите страницу статьи на фронтенде, и вы увидите добавленный текст в конце основного текста статьи.

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

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

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

Добавить пункт меню для плагинов в бэкенде

Мы создадим отдельную страницу меню для управления плагинами, на которой можно будет настроить некоторые параметры. Для этого потребуется использовать… add_action Крючки и… admin_menu Действие.

В основном файле вашего плагина продолжите добавлять следующий код:

/**
 * 在 WordPress 后台管理菜单中添加一个新的顶级菜单项
 */
function mfp_register_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 slug
        'mfp_render_settings_page', // 渲染页面的回调函数
        'dashicons-admin-plugins', // 图标(可选)
        80                      // 菜单位置
    );
}
add_action( 'admin_menu', 'mfp_register_admin_menu' );

add_menu_page Функция используется для регистрации нового верхнего уровня меню.manage_options Это идентификатор прав, означающий, что данный меню видят только пользователи, имеющие право на доступ к “управленческим функциям” (обычно это администраторы).mfp_render_settings_page Это название функции, которую мы собираемся определить далее; она будет использоваться для вывода HTML-контента страницы настроек.

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

Содержимое страницы настройок состоит из следующих элементов:

Теперь нам необходимо определить упомянутые выше функции-обратные вызовы (callback functions). mfp_render_settings_page Давайте рендерим простую страницу настройок.

/**
 * 渲染插件设置页面的内容
 */
function mfp_render_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( 'mfp_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

Эта функция возвращает базовую структуру управленческой страницы в WordPress, включающую заголовок и форму. Для её реализации были использованы две ключевые функции из API настроек WordPress:settings_fields и do_settings_sectionsДля того чтобы всё работало правильно, нам также необходимо зарегистрировать настройки, разделы (секции) и поля (фильтры).

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

Использование API настроек для регистрации параметров

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

/**
 * 初始化插件的设置
 */
function mfp_settings_init() {
    // 注册一个新的设置项 `mfp_options` 到数据库
    register_setting( 'mfp_settings_group', 'mfp_options' );

// 在页面内添加一个新的节
    add_settings_section(
        'mfp_section_basic',
        '基础设置',
        'mfp_section_basic_callback',
        'my-first-plugin'
    );

// 向节中添加一个字段
    add_settings_field(
        'mfp_field_custom_text',
        '自定义页脚文本',
        'mfp_field_custom_text_callback',
        'my-first-plugin',
        'mfp_section_basic',
        array( 'label_for' =&gt; 'mfp_field_custom_text' )
    );
}
add_action( 'admin_init', 'mfp_settings_init' );

/**
 * 节描述的回调函数(可以为空)
 */
function mfp_section_basic_callback() {
    echo '<p>Здесь вы можете настроить основные параметры плагина.</p>';
}

/**
 * 字段 `mfp_field_custom_text` 的回调函数,用于输出 HTML 输入框
 */
function mfp_field_custom_text_callback() {
    // 从数据库获取现有值
    $options = get_option( 'mfp_options' );
    $value = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
    ?&gt;
    <input type="text"
           id="mfp_field_custom_text"
           name="mfp_options[custom_text]"
           value="<?php echo esc_attr( $value ); ?>"
           class="regular-text" />
    <p class="description">Этот текст будет отображен в конце статьи.</p>
    &lt;?php
}

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

function mfp_add_footer_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'mfp_options' );
        $custom_text = isset( $options['custom_text'] ) ? $options['custom_text'] : '';
        if ( ! empty( $custom_text ) ) {
            $content .= '<p><em>'`. esc_html($custom_text).`'</em></p>';
        }
    }
    return $content;
}

Теперь ваш плагин обладает полноценной страницей настроек в бэкенде. Администратор может найти эту страницу в меню “Мои плагины”, ввести пользовательский текст для футера и сохранить изменения. Этот текст будет динамически отображаться в конце статей на веб-сайте.

Оптимизация плагинов и практики обеспечения безопасности

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

Обеспечение безопасности кода

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

  • Для получения экранируемого (отображаемого на экране) значения используйте такие функции, как… esc_html(), esc_attr(), esc_url(), wp_kses_post() Для обработки динамического контента необходимо использовать специальные механизмы эскапирования.
  • Очистите введенные данные с помощью таких функций, как… sanitize_text_field(), sanitize_email(), intval() Обрабатывается данные, предоставленные пользователем в форме.
  • Проверка прав доступа: используется в функции обратного вызова администратора. current_user_can() Необходимо выполнить вторичную проверку прав доступа. При использовании AJAX- или REST-API-сервисов, предназначенных для изменения данных, обязательно используйте токен nonce (цифровой токен) для аутентификации пользователя.

Следуйте стандартам кодирования WordPress.

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

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

С самого начала добавление поддержки интернационализации к вашему плагину позволит пользователям по всему миру легко переводить его на свои языки. Это можно осуществить следующими шагами:
1. 在插件头部注释中正确设置 Text Domain и Domain Path
2. 在所有需要翻译的字符串周围使用 WordPress 的翻译函数,如 (), _e(), esc_html() и т.д.
3. 使用工具如 Poedit 来生成 .pot Шаблонный файл, предназначенный для создания переводов. .po и .mo Переводите документы.

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

function mfp_section_basic_callback() {
    echo '<p>' . esc_html__( '在这里配置插件的基础选项。', 'my-first-plugin' ) . '</p>';
}

резюме

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

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

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

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

Первым шагом является включение режима отладки в WordPress. В вашем случае… wp-config.php В документе будет указано, что... WP_DEBUG Константа установлена на trueЭто позволит отображать ошибки, предупреждения и уведомления PHP непосредственно на странице.

Кроме того, можно использовать… error_log() Функция позволяет записывать пользовательские сведения о дебагировании в ошибочный журнал сервера или использовать инструменты разработчика браузера (консоль и вкладка «Сеть») для отладки JavaScript- и AJAX-запросов. Для сложных логических процессов применение профессиональных инструментов дебагирования, таких как Xdebug, значительно ускоряет и упрощает работу.

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

Возможно, особенно при работе с одинаковыми хуками, использовании общих глобальных переменных или имен классов. Чтобы свести к минимуму конфликты, обязательно добавляйте уникальные префиксы к именам всех ваших функций, классов, переменных и параметров. Например, не используйте одинаковые имена для разных элементов кода. add_footer_textВместо этого используется что-то похожее… myplugin_add_footer_text Название.

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

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

Помимо прочных знаний PHP, вам также необходимо глубоко изучить следующее:
– JavaScript: используется для взаимодействия с пользователем на стороне клиента (фронтенде) и для разработки пользовательских настроек в WordPress.
– jQuery: Несмотря на то, что WordPress переходит на современные фреймворки для работы с JavaScript, jQuery по-прежнему находит широкое применение.
REST API: используется для создания разделённых на компоненты приложений для пользовательского интерфейса или для взаимодействия с внешними сервисами.
Знания о базах данных: понимание структуры базы данных WordPress, а также способы безопасного выполнения пользовательских запросов и создания новых таблиц.
Composer: используется для управления пакетами зависимостей PHP.
Инструменты для разработки: такие как Webpack, используемые для управления процессом компиляции современного JavaScript и SASS.

Как опубликовать свой плагин в официальном каталоге WordPress?

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

Если ваш плагин пройдет проверку, он будет добавлен в SVN-репозиторий, и вы сможете использовать SVN для его обновления и управления. После публикации пользователи смогут найти, установить и обновить ваш плагин прямо из своего WordPress-панели управления.