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

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

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

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

Основной входной файл плагина; например, мы называем его…my-first-plugin.phpВ файле плагина обязательно должна содержаться специальная заголовочная строка (аннотация). Эта строка определяет имя плагина, его описание, версию, автора и другую информацию, и является единственным критерием, по которому WordPress распознаёт и загружает плагин. Самый простой плагин может состоять из этого одного файла; он использует API WordPress (такие как действия-хаки (Action Hooks) и фильтры-хаки (Filter Hooks)) для изменения или расширения функционала веб-сайта.

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

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

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

Давайте опробуем создание самого простого плагина на примере классического примера “Hello World”. Функция этого плагина заключается в отображении приветственного сообщения в верхней части содержимого статей на каждой странице сайта.

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

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

Написание основного файла плагина

Откройте.my-hello-plugin.phpОткройте файл и введите следующий код. Этот код соответствует стандартному формату плагинов для WordPress и включает в себя заголовок информации о плагине, а также код, реализующий его функции.

<?php
/**
 * Plugin Name:       我的问候插件
 * Plugin URI:        https://yourwebsite.com/my-hello-plugin
 * Description:       这是一个简单的插件,用于在文章内容前输出“您好,读者!”。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-hello-plugin
 */

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

/**
 * 在主文章内容前添加问候语。
 *
 * @param string $content 原始的文章内容。
 * @return string 添加了问候语后的新内容。
 */
function my_hello_add_greeting( $content ) {
    $greeting = &#039;<p style="background-color:#f0f8ff; padding:10px; border-left:4px solid #0073aa;"><strong>Здравствуйте, читатель! Добро пожаловать к прочтению этой статьи.</strong></p>';
    // 只在主循环且是文章页面时添加
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $greeting . $content;
    }
    return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器
add_filter( 'the_content', 'my_hello_add_greeting' );

Активируйте и протестируйте плагин.

Необходимо загрузить папку, содержащую этот файл, на сервер.wp-content/plugins/Каталог плагинов; если вы работаете в локальной среде разработки, просто разместите плагин в соответствующем месте. Затем войдите в панель управления WordPress и перейдите в меню “Плагины”. В списке плагинов вы должны увидеть плагин “My Greeting Plugin”. Нажмите кнопку “Включить”.

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

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

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

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

Акционные хаки (action hooks) позволяют вам вставлять и выполнять собственный код в определенные моменты работы WordPress — например, при публикации статей или при загрузке страницы.save_postДействия запускаются при сохранении статьи или страницы в базу данных. Вы можете это сделать следующим образом:add_action()Функция “монтирует” вашу пользовательскую функцию на этот хук (hook).

Фильтровые хенки (filter hooks) позволяют вам изменять данные, генерируемые WordPress в процессе обработки. Вы регистрируете функцию в системе фильтров, и когда WordPress выполняет этот фильтр, он передает данные всем зарегистрированным функциям, а затем получает результаты их обработки. Именно такой механизм использовался в приведенном выше примере.the_contentЭто типичный фильтр-хук, который позволяет вам изменять содержимое статьи перед её выводом.

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

Создайте простой интерфейс для управления параметрами.

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

Во-первых, мы используем…add_action(‘admin_menu’, …)Создайте функцию, которая будет добавлять новый пункт меню в систему управления.

/**
 * 在WordPress后台添加一个自定义菜单页面。
 */
function my_hello_add_admin_menu() {
    add_menu_page(
        ‘问候插件设置’, // 页面标题
        ‘问候插件’,     // 菜单标题
        ‘manage_options’, // 所需权限
        ‘my-hello-plugin’, // 菜单slug
        ‘my_hello_admin_page_html’, // 用于显示页面内容的回调函数
        ‘dashicons-format-chat’, // 图标(可选)
        80 // 菜单位置(可选)
    );
}
add_action( ‘admin_menu‘, ’my_hello_add_admin_menu’ );

/**
 * 自定义设置页面的HTML输出。
 */
function my_hello_admin_page_html() {
    // 检查用户权限
    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_hello_options’ );
            do_settings_sections( ‘my-hello-plugin’ );
            submit_button( ‘保存问候语设置’ );
            ?>
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

Филиалы регистрации и настройки вывода данных

Одних только страниц недостаточно; нам также необходимо создать параметры, которые можно сохранять. Для этого потребуется использовать…add_action(‘admin_init’, …), а такжеregister_setting()add_settings_section()иadd_settings_field()Ряд функций.

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

/**
 * 初始化插件的设置。
 */
function my_hello_settings_init() {
    // 注册一个设置项到数据库的‘my_hello_options’键下
    register_setting( ‘my_hello_options‘, ’my_hello_greeting_text’ );

// 在页面中添加一个设置区域
    add_settings_section(
        ‘my_hello_section’, // 区域ID
        ‘问候语设置’,        // 区域标题
        ‘my_hello_section_html’, // 区域描述的回调函数
        ‘my-hello-plugin’ // 所属页面slug
    );

// 在区域内添加一个具体的设置字段
    add_settings_field(
        ‘my_hello_field’, // 字段ID
        ‘自定义问候语’,    // 字段标签
        ‘my_hello_field_html’, // 用于渲染字段HTML的回调函数
        ‘my-hello-plugin’, // 所属页面slug
        ‘my_hello_section’ // 所属区域ID
    );
}
add_action( ‘admin_init‘, ’my_hello_settings_init’ );

/**
 * 设置区域的描述信息。
 */
function my_hello_section_html() {
    echo ‘<p>Здесь можно настроить текст приветствия, который будет отображаться в начале статьи.</p>’;
}

/**
 * 渲染设置字段的HTML。
 */
function my_hello_field_html() {
    // 从数据库获取已保存的值,如果没有则使用默认值
    $greeting = get_option( ‘my_hello_greeting_text‘, ’您好,读者!欢迎阅读本文。’ );
    ?&gt;
    <input type="‘text’"
           id="‘my_hello_greeting_text’"
           name="‘my_hello_greeting_text’"
           value="“NO NUMERIC NOISE KEY" 1000”
 class="“regular-text”" />
    <p class="“description”">Пожалуйста, введите приветствие, которое вы хотите отобразить перед содержанием статьи.</p>
    &lt;?php
}

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

function my_hello_add_greeting( $content ) {
    // 获取保存的自定义问候语,如果不存在则使用默认值
    $custom_greeting = get_option( ‘my_hello_greeting_text‘, ’您好,读者!欢迎阅读本文。’ );
    $greeting = ‘<p style="“background-color:#f0f8ff;" padding:10px; border-left:4px solid #0073aa;”><strong>’ . esc_html( $custom_greeting ) . ‘</strong></p>’;
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $greeting . $content;
    }
    return $content;
}

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

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

Лучшие практики разработки плагинов и аспекты их безопасности

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

Аспекты безопасности

Безопасность является первостепенным принципом. Никогда не доверяйте данным, вводимым пользователями. Все данные, получаемые от пользователей (например…)$_GET$_POST$_COOKIEДанные необходимо соответствующим образом очистить, проверить и обработать (включая применение специальных символов для предотвращения ошибок) перед использованием в запросах к базе данных, отображением на страницах или выполнением операций с файлами.

Для данных, выводимых на HTML-страницу, используется…esc_html()esc_attr()илиwp_kses_post()Необходимо использовать функции для эскапирования символов. Для переменных, используемых в запросах к базе данных, обязательно следует применять соответствующие методы эскапирования.$wpdb->prepare()Для параметризованных запросов используйте соответствующие методы; ни в коем случае не следует просто сливать значения переменных непосредственно с SQL-запросом. В плагинах всегда следует придерживаться этого правила.defined(‘ABSPATH’) or die;Это сделано для предотвращения прямого доступа к файлам.

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

По мере расширения функционала плагинов становится сложно обслуживать весь код, находящийся в одном главном файле. Разумнее разделить код по его функциям на отдельные файлы. Обычно главный файл отвечает за определение хуков (специальных механизмов взаимодействия между компонентами системы) и основных процессов, в то время как страницы настройок, функциональные методы, определения классов и другие элементы кода размещаются в отдельных файлах.includes/илиadmin/public/В таких подкаталогах… и с помощью…require_onceВведение.

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

$приветствие = ‘<p><strong>’ . esc_html__( ‘您好,读者!欢迎阅读本文。’ , ’my-hello-plugin’ ) . ‘</strong></p>’;

Таким образом, переводчики смогут использовать это..poи.moФайл содержит переводы вашего плагина на разные языки.

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

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

$data = get_transient( ‘my_plugin_api_data’ );
if ( false === $data ) {
    // 数据不存在或已过期,从API获取
    $data = wp_remote_retrieve_body( wp_remote_get( ‘https://api.example.com/data’ ) );
    // 将数据存储12小时
    set_transient( ‘my_plugin_api_data’, $data, 12 * HOUR_IN_SECONDS );
}
// 使用 $data

Кроме того, убедитесь, что файлы CSS и JavaScript загружаются только на тех страницах, где они действительно необходимы. Для этого используйте соответствующие механизмы контроля загрузки.wp_enqueue_script()иwp_enqueue_style()Функция, сопровождаемая соответствующими хуками (например…).wp_enqueue_scriptsДля загрузки фронтенд-ресурсов используется специальный метод; для загрузки бэкенд-ресурсов применяется другой подход.admin_enqueue_scriptsКрючок.

резюме

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

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

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

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

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

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

Прежде всего, убедитесь, что вашwp-config.phpВ файле включен режим отладки WordPress. Это было сделано путем настройок.define('WP_DEBUG', true);иdefine('WP_DEBUG_LOG', true);Сообщения об ошибках будут записаны.wp-content/debug.logВ файле это более безопасно, чем простое отображение на странице. Кроме того, это можно использовать в сочетании с другими методами обеспечения безопасности.error_log()Чтобы проверить значения переменных, используйте функции для их вывода на экран. Также вы можете воспользоваться инструментами разработчика браузера — панелями “Сеть” (Network) и “Консоль” (Console) — для анализа проблем с передним фронтом (frontend) скриптов и стилей.

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

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

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

Тема (Theme) в основном отвечает за внешний вид и структуру веб-сайта; она включает в себя шаблоны, таблицы стилей (CSS-файлы) и некоторые функции, связанные с отображением контента. Плагины (Plugins), с другой стороны, предназначены для добавления или изменения функциональности сайта, и их влияние (в большинстве случаев) не зависит от используемой темы. Хорошим правилом является следующее: если какая-либо функция напрямую связана с внешним видом сайта (например, с расположением элементов страницы, цветовой схемой), ее следует разместить в теме. Если же речь идет о универсальной, независимой функции (например, форме для связи с пользователем, инструментах для оптимизации сайта для поисковых систем, системе кэширования), то такая функция должна сохраняться независимо от выбранной темы; для ее реализации лучше использовать плагины. Это помогает сохранять разделение функциональности и дизайна, а также повышает гибкость сайта.