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

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

Зачем нужно разрабатывать пользовательские плагины?

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

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

Создание базовой структуры вашего первого плагина

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

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

Создание основного файла плагина и добавление заголовочных комментариев

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

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

В начале файла обязательно должны быть присутствовать комментарии с информацией о плагине, соответствующие стандартам 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 через веб-браузер, перейдите на страницу “Плагины” (Plugins). Там вы увидите плагин с названием “Мой первый пользовательский плагин” (My First Custom Plugin) в списке доступных плагинов. Вы сможете активировать или деактивировать этот плагин. На данный момент у него нет никаких функций.

Создание безопасной оболочки для функций плагина

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

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

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

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问文件
}

class My_First_Plugin {
    /**
     * 构造方法,用于初始化插件
     */
    public function __construct() {
        // 初始化钩子
        $this->init_hooks();
    }

/**
     * 初始化 WordPress 钩子(动作和过滤器)
     */
    private function init_hooks() {
        // 后续的钩子将在这里添加
    }
}

// 初始化插件
new My_First_Plugin();

Через if ( ! defined( 'ABSPATH' ) ) В этом коде мы обеспечили, чтобы к этому файлу можно было получить доступ только из среды WordPress, тем самым повысив уровень безопасности. Теперь базовая структура плагина готова к использованию.

Расширение основных функций WordPress с помощью хуков

Ядро API плагинов WordPress основано на так называемых “хаках” (Hooks), которые позволяют выполнять пользовательский код в определенные моменты времени или над конкретными данными. Хаки делятся на два типа: действия (Actions) и фильтры (Filters).

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

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

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

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

Во-первых, в init_hooks Добавьте хук для регистрации в методе:

private function init_hooks() {
    // 在文章内容末尾添加信息的过滤器
    add_filter( 'the_content', array( $this, 'append_custom_text' ) );
    // 在管理栏添加节点的动作
    add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_node' ), 999 );
}

Затем в классе определите соответствующие методы обратного вызова (callback methods).

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

/**
 * 在文章内容末尾添加自定义文本(过滤器回调)
 *
 * @param string $content 原始文章内容。
 * @return string 修改后的文章内容。
 */
public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Техническая поддержка для этого текста предоставляется проектом “Мой первый плагин” («My First Plugin»).</em></p>'Функция add_admin_bar_node добавляет пользовательский узел (кнопку) в административную панель WordPress.  
  @param WP_Admin_Bar $wp_admin_bar Объект административной панели WordPress.  
  */  
 public function add_admin_bar_node( WP_Admin_Bar $wp_admin_bar ) {  
     $args = array(  
        'id'    =&gt; 'my_plugin_node',  
        'title' =&gt; 'Мой плагин',  
        'href'  =&gt; admin_url( 'plugins.php' ),  
        'meta'  =&gt; array( 'class' =&gt; 'my-plugin-node' )  
    );  
    $wp_admin_bar-&gt;add_node( $args );  
  }

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

Использование фильтров для изменения формата вывода данных

Фильтры используются для изменения данных, передаваемых в определенный момент. Они принимают значение и должны возвращать измененное значение. Мы использовали их ранее. append_custom_text Метод, по сути, представляет собой функцию-обратный вызов (callback) фильтра. Давайте создадим ещё один более типичный пример использования фильтра: изменение длины резюме статьи.

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

В init_hooks Добавьте следующее в текст:

add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), 999 );

Затем определяем метод обратного вызова (callback method):

/**
 * 修改文章摘要的默认字数长度
 *
 * @param int $length 默认的摘要长度。
 * @return int 修改后的摘要长度。
 */
public function custom_excerpt_length( $length ) {
    // 将摘要长度设置为 30 个字
    return 30;
}

Реализация страницы настроек плагина с возможностью конфигурирования параметров

Для того чтобы плагины были более гибкими, обычно необходимо предоставить пользователям страницу настроек. WordPress предлагает “API настроек” для безопасного и стандартизированного создания таких страниц.

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

Во-первых, нам необходимо добавить пункт меню в интерфейс администрирования WordPress. Для этого мы будем использовать… add_options_page Функция добавляет подстраницу в главное меню “Настройки”.

В init_hooks Добавьте действие в…

add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) );

Определение метода добавления меню:

/**
 * 向 WordPress 后台添加插件设置页面
 */
public function add_plugin_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 Slug
        array( $this, 'display_plugin_admin_page' ) // 回调函数
    );
}

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

Далее нам необходимо определить… display_plugin_admin_page Методы для отображения содержимого страницы, а также для регистрации настроек, полей и разделов.

Во-первых, необходимо добавить ещё один хук для регистрации настроек:

add_action( 'admin_init', array( $this, 'register_plugin_settings' ) );

Затем реализуйте соответствующие методы:

/**
 * 使用 WordPress 设置 API 注册设置、字段和章节
 */
public function register_plugin_settings() {
    // 注册一个设置,存储到一个选项 `my_first_plugin_options`
    register_setting(
        'my_first_plugin_options_group', // 选项组名
        'my_first_plugin_options'        // 选项名
    );

// 添加一个设置章节
    add_settings_section(
        'my_first_plugin_main_section',  // 章节 ID
        '主要设置',                      // 章节标题
        array( $this, 'render_section_description' ), // 章节描述回调
        'my-first-plugin'                // 页面 Slug
    );

// 向章节中添加一个文本字段
    add_settings_field(
        'custom_text_field',             // 字段 ID
        '自定义文本',                    // 字段标题
        array( $this, 'render_text_field' ), // 字段渲染回调
        'my-first-plugin',               // 页面 Slug
        'my_first_plugin_main_section'   // 所属章节 ID
    );
}

/**
 * 渲染设置章节的描述文字
 */
public function render_section_description() {
    echo '<p>Здесь вы можете настроить параметры вашего первого плагина.</p>';
}

/**
 * 渲染自定义文本输入字段
 */
public function render_text_field() {
    $options = get_option( 'my_first_plugin_options' );
    $value = isset( $options['custom_text_field'] ) ? $options['custom_text_field'] : '';
    echo '<input type="text" name="my_first_plugin_options[custom_text_field]" value="' . esc_attr( $value ) . '" class="regular-text" />'echo '<p class="description">Текст, введённый здесь, будет отображен в конце статьи.</p>'/**
 * Отображение основного содержания страницы управления плагинами.
 */
public function display_plugin_admin_page() {
    // Проверка прав пользователя
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1></h1>
        <form action="/ru/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出安全字段、章节和字段
            settings_fields( 'my_first_plugin_options_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

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

public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'my_first_plugin_options' );
        $custom_text = isset( $options['custom_text_field'] ) &amp;&amp; ! empty( $options['custom_text_field'] ) ?
            '<p><em>'`. esc_html($options['custom_text_field'])`.'</em></p>' :
            '<p><em>Техническая поддержка для этого текста предоставляется проектом “Мой первый плагин” («My First Plugin»).</em></p>';
        $content .= $custom_text;
    }
    return $content;
}

Теперь пользователи могут настроить текст, который отображается в конце статей, на странице “Настройки” → “Мои плагины”.

резюме

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

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

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

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

Вам потребуются базовые знания языка программирования PHP, включая его синтаксис, переменные, функции, классы и объекты. Также будет полезно иметь представление об HTML, CSS и JavaScript, особенно при создании плагинов, включающих элементы взаимодействия с пользователем на стороне клиента или сложные интерфейсы на стороне сервера. Кроме того, необходимо знать основы работы и архитектуры системы WordPress.

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

Во-первых, убедитесь, что у вас… wp-config.php В документе будет указано, что... WP_DEBUG Установить как trueЭто включит функцию отчетов об ошибках в WordPress. Используйте инструменты разработчика в браузере (вкладки Console и Network) для проверки ошибок JavaScript и сетевых запросов. Что касается кода на PHP, то для его анализа также могут быть использованы соответствующие инструменты или методы отладки. error_log() Функция записывает значения переменных или другую информацию в лог-файлы сервера, предназначенные для отладки, или использует специализированные отладочные инструменты для отслеживания хода выполнения кода и изменений в значениях переменных.

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

Во многих случаях это возможно, однако необходимо обратить внимание на проблемы с ссылками на пути и URL-адреса. Использование таких ссылок в тексте темы допустимо. get_template_directory_uri() Чтобы получить URI к каталогу тем, в плагине следует использовать другой подход. plugin_dir_url(FILE)Аналогично, функция для получения пути к каталогу тем. get_template_directory() Также следует заменить на элементы плагина (plugins). plugin_dir_path(FILE)Кроме того, необходимо убедиться, что все функции в коде надлежащим образом организованы в классах или функциях с префиксами, чтобы избежать конфликтов.

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

При разработке коммерческих плагинов, предназначенных для распространения, необходимо уделять особое внимание качеству кода, безопасности и расширяемости. Также необходимо тщательно подготовиться к международному и локальному использованию (с использованием соответствующих инструментов и подходов). __()_e() Для перевода необходимо предоставить код (функции и текстовые поля). Код должен соответствовать стандартам кодирования WordPress. Необходимо учитывать лицензию (обычно GPL) и механизм последующих обновлений. Также крайне важно предоставить четкую и подробную документацию по использованию плагина и каналы технической поддержки. В экосистеме 2026 года обеспечение совместимости плагина с новыми версиями WordPress, PHP, а также популярными темами и другими плагинам является важной частью постоянного обслуживания.

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

WordPress использует технологию GNU gettext для интернационализации (i18n). Во-первых, все строки, требующие перевода в плагине, должны быть обернуты в специальную функцию, например: __('文本', 'my-first-plugin') Используется для возврата перевода._e('文本', 'my-first-plugin') Используйте его для вывода перевода. Затем с помощью такого инструмента, как Poedit, просканируйте исходный код плагина и создайте его перевод. .pot Шаблон документа. Переводчик создает перевод на соответствующий язык на основе этого шаблона. .po Преобразовать файл и скомпилировать его в машиночитаемый формат. .mo В конце концов, необходимо передать файл. load_plugin_textdomain() Функция интегрирована в код инициализации плагина для загрузки файлов с переводами по правильному пути.