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

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

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

Основная структура и организация файлов плагинов WordPress.

Стандартный плагин WordPress обычно состоит из одного основного файла. Название этого основного файла очень важно, и оно обычно совпадает с названием каталога плагина. Например, для плагина под названием “my-awesome-plugin” основной файл может быть назван так:my-awesome-plugin.phpВ этом файле обязательно должна быть заголовочная аннотация плагина, которая используется для предоставления основной информации о плагине системе WordPress.

/**
 * Plugin Name:      我的第一个插件
 * Plugin URI:       
 * Description:      这是一个用于演示的WordPress插件。
 * Version:          1.0.0
 * Author:           你的名字
 * License:          GPL v2 or later
 * Text Domain:      my-first-plugin
 */

Каталог плагинов рекомендуется назвать уникальным образом, чтобы избежать конфликтов с существующими плагинами, и разместить его в соответствующем месте./wp-content/plugins/В папке. Помимо основного PHP-файла, папка может содержать папку assets для хранения JavaScript и CSS, папку languages для локализации, а также папку templates для шаблонов. Четкая структура файлов, например, такая какincludes/\nИспользуется для основных классов и функций,admin/Для обработки бэкэнд-логики,public/Использование логики на стороне клиента может значительно повысить удобство обслуживания плагина.

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

Реализация основных функций плагина.

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

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

Обычный сценарий — автоматическое добавление текста в конец статьи. Это можно сделать с помощьюthe_contentЭто можно сделать с помощью фильтров. В главном файле плагина вы можете определить функцию и использовать её.add_filterФункция привязывает его к фильтру.

function myplugin_add_footer_text( $content ) {
    if ( is_single() ) {
        $custom_text = '<p><em>Данный текст был автоматически сгенерирован в качестве заключительной информации моим плагином.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_footer_text' );

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

Функция myplugin_add_admin_page() {
    add_menu_page(
        'Настройки моего плагина', // Название страницы
        'Мой плагин',   // Название меню
        'manage_options', // Права доступа
        'myplugin-settings', // Название меню
        'myplugin_admin_page_html', // Функция обратного вызова
        'dashicons-admin-generic', // Иконка
        20 // Позиция
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_page' );

function myplugin_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">
            
        <input type="hidden" name="trp-form-language" value="ru"/></form>
    </div>
    &lt;?php
}

Настройка плагинов и обработка параметров.

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

Во-первых, вам нужно использоватьregister_setting()Функция для регистрации набора настроек. Затем используйте её.add_settings_section()Добавьте блок настроек и используйте его.add_settings_field()Добавьте конкретные поля настроек в этот блок. Эти действия обычно выполняются вadmin_initЗавершено на крючке.

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

function myplugin_settings_init() {
    // 注册一个新设置
    register_setting( 'myplugin_options', 'myplugin_settings', 'myplugin_sanitize' );

    // 添加一个设置区块
    add_settings_section(
        'myplugin_section_general',
        '通用设置',
        'myplugin_section_general_cb',
        'myplugin-settings'
    );

    // 添加一个文本字段
    add_settings_field(
        'myplugin_field_footer_text',
        '自定义尾部文本',
        'myplugin_field_footer_text_cb',
        'myplugin-settings',
        'myplugin_section_general',
        [ 'label_for' => 'myplugin_field_footer_text' ]
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染回调函数
function myplugin_field_footer_text_cb() {
    $options = get_option( 'myplugin_settings' );
    ?>
    <input type="text" id="myplugin_field_footer_text" name="myplugin_settings[footer_text]" value="<?php echo esc_attr( $options['footer_text'] ?? '' ); ?>" class="regular-text">
    <?php
}

// 数据清理回调函数
function myplugin_sanitize( $input ) {
    $sanitized = [];
    if ( isset( $input['footer_text'] ) ) {
        $sanitized['footer_text'] = sanitize_text_field( $input['footer_text'] );
    }
    return $sanitized;
}

На переднем плане вы можете сделать это с помощьюget_option('myplugin_settings')Получите массив сохранённых параметров и используйте эти значения в логике вашей функции.

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

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

Валидация — это процесс проверки данных на соответствие ожидаемому формату перед их обработкой, например, с помощьюfilter_var()Проверка электронной почты. Очистка (Sanitization) — это процесс удаления незаконных или опасных символов из данных. WordPress предоставляет такие инструменты, какsanitize_text_field()sanitize_email()wp_kses_post()и многие другие функции очистки. Эскапирование (Escaping) означает, что при выводе данных в HTML, JavaScript или URL они должны быть закодированы безопасно, чтобы предотвратить атаки XSS. Для этого следует использовать соответствующие функции.esc_html()esc_attr()esc_url()иwp_json_encode()Такие функции…

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

При обработке не-CE-запросов (AJAX-запросов) в плагине обязательно проверяйте,nonce(Номер используется один раз) для проверки легитимности запроса и проверки текущих прав пользователя (Возможности).

// PHP端:生成nonce并输出到页面
wp_nonce_field( 'myplugin_ajax_action', 'myplugin_nonce' );

// JavaScript端:随AJAX请求发送nonce
jQuery.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
        action: 'myplugin_ajax_handler',
        nonce: jQuery('#myplugin_nonce').val(),
        // ... 其他数据
    }
});

// PHP端:处理AJAX请求时验证
function myplugin_ajax_handler() {
    check_ajax_referer( 'myplugin_ajax_action', 'nonce' );
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_die( '权限不足' );
    }
    // ... 处理安全请求
}
add_action( 'wp_ajax_myplugin_ajax_handler', 'myplugin_ajax_handler' );

Кроме того, придерживайтесь стандартов кодирования WordPress и обеспечивайте полную поддержку интернационализации (используя ).__()и_e()Функция, и используйте её.load_plugin_textdomain()Загрузка файлов перевода и очистка необходимых ресурсов при отключении плагина (например, с помощьюregister_uninstall_hook()Удаление неиспользуемых функций (например, удаление опций базы данных) — это неотъемлемая часть лучших практик профессиональной разработки плагинов.

резюме

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

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

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

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

Вы должны иметь хорошую базовую подготовку в области программирования на PHP, и понимание концепций объектно-ориентированного программирования (ООП) будет весьма полезным. Кроме того, вам необходимо иметь базовые знания HTML, CSS и JavaScript, чтобы работать с отображением и взаимодействием на стороне клиента. Самое главное — хорошо разбираться в основных концепциях WordPress, таких как хуки (Hooks), API опций, роли и права пользователей, а также структура базы данных.

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

Прежде всего, убедитесь, что вwp-config.phpВ файле включеноWP_DEBUGиWP_DEBUG_LOGЭто запишет сообщение об ошибке в журнал./wp-content/debug.logЭти данные хранятся в файле и не отображаются для пользователей на переднем плане.

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

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

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

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

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

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

Во-первых, определите это в комментариях в верхней части главного файла плагина.Text DomainИ использовать его при загрузке плагина.load_plugin_textdomain()Функция загружает файл перевода. Все строки в плагине, которые требуют перевода, используют__()(вернуть строку перевода)или_e()(Непосредственно выводим строку для перевода) Оберните её в функцию. После этого вы можете использовать такие инструменты, как Poedit, для генерации перевода..potШаблонные файлы, предназначенные для переводчиков, позволяющие им создавать тексты на определённых языках..poи.moДокумент.