Основная структура плагинов для WordPress и их создание
Разработка плагина для WordPress начинается с простого PHP-файла. Этот основной файл должен содержать определенные заголовочные комментарии, которые позволяют системе WordPress распознать его и обработать его как плагин. Самый простой плагин может состоять из одного файла. my-first-plugin.php。
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 开发者姓名
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ В комментариях в начале файла информация о названии плагина (`Plugin Name`) является обязательной; остальные данные предоставляются по желанию. После активации плагина его функции реализуются путем выполнения соответствующих PHP-функций в подходящие моменты времени. Одним из наиболее распространенных способов реализации таких функций является использование “хуков действий” (action hooks). Например, для добавления текста в футер веб-страницы можно воспользоваться таким подходом. wp_footer Крючок.
// Вывод пользовательского содержимого в нижний колонтитул
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">Спасибо, что используете мой плагин!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); add_action Это встроенная функция ядра WordPress, предназначенная для подключения пользовательских функций к определённым точкам обработки событий («акциям»). Рекомендуется размещать папки с плагинами в определённых местах в файловой структуре сайта. /wp-content/plugins/your-plugin-name/ Кроме основного файла, в эту папку также могут быть включены файлы с CSS-стилями, JavaScript-кодом, изображениями и другими ресурсами.
Рекомендуемое чтение Полное руководство по темам WordPress: от выбора и настройки до разработки.。
Как добавить меню управления для плагина?
Чтобы плагин имел страницу настроек в административной панели WordPress, вам необходимо добавить для него меню администрирования. Это обычно делается с помощью admin_menu Для реализации используются действия-хаки (action hooks).
Основные функции (Core functions) add_menu_page Используется для добавления главного пункта меню в боковую панель на заднем плане и соответствующей ему страницы настроек.
Функция myplugin_add_admin_menu() {
add_menu_page(
'Настройки моего плагина', // Заголовок страницы
'Мой плагин', // Название меню
'manage_options', // Требуемые права
'myplugin-settings', // Ссылка на меню
'myplugin_settings_page', // Функция для отображения страницы
'dashicons-admin-generic', // Иконка (опционально)
6 // Позиция меню (опционально)
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// Настройка HTML-контента страницы
function myplugin_settings_page() {
?>
<div class="wrap">
<h1></h1>
<form action="/ru/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'myplugin_options' ); // 输出安全字段
do_settings_sections( 'myplugin-settings' ); // 输出设置区域
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="ru"/></form>
</div>
<?php
} После создания меню следующим шагом является использование API настроек WordPress для определения конкретных настраиваемых параметров.
Используйте API настройок для сохранения конфигурации плагина.
Ручная обработка отправки форм и проверки их безопасности является сложной и подверженной ошибкам процедурой. API настроек WordPress предоставляет стандартизированные способы регистрации, отображения и сохранения настроек. Для этого используются три основные функции:register_setting, add_settings_section и add_settings_field。
В следующем примере показано, как зарегистрировать группу опций и добавить текстовое поле.
Рекомендуемое чтение Руководство по оптимизации производительности сайта WordPress: углубленный анализ и практические стратегии.。
function myplugin_settings_init() {
// Зарегистрируйте новую настройку в таблице базы данных `wp_options`.
register_setting( 'myplugin_options', 'myplugin_settings' ); // Зарегистрируйте новую настройку в базе данных в таблице `wp_options`.
// Добавьте новый раздел на страницу настроек
add_settings_section(
'myplugin_section_basic', // идентификатор раздела
'Basic Settings', // название раздела
'myplugin_section_callback', // функция обратного вызова для описания раздела
'myplugin-settings' // соответствующий слиг страницы
);
// Добавляем поле в раздел
add_settings_field(
'myplugin_field_text', // id поля
'example text', // заголовок поля
'myplugin_field_text_cb', // функция обратного вызова для HTML-вывода поля
'myplugin-settings', // параметры страницы
'myplugin_section_basic' // идентификатор поля
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// Функция обратного вызова для описания разделов
function myplugin_section_callback() {
echo'<p>Это раздел, предназначенный для настройки основных параметров плагина.</p>';
}
// Функция обратного вызова для текстовых полей
function myplugin_field_text_cb() {
// Получение ранее сохраненных настроек из базы данных
$options = get_option( 'myplugin_settings' );
$value = $options['myplugin_field_text'] ?? ''; // Используйте оператор слияния null для получения значения по умолчанию
// Выведите поле ввода HTML
echo'<input type="text" name="myplugin_settings[myplugin_field_text]" value="' . esc_attr( $value ) . '" class="regular-text">'echo '<p class="description">Пожалуйста, введите несколько примеров текста.</p>';
} Значения настроек, сохраненные таким образом, могут быть использованы в любом месте кода плагина. get_option('myplugin_settings') Безопасное получение и использование.
Безопасность и лучшие практики при разработке плагинов
Безопасность является одним из главных аспектов разработки плагинов. Небезопасный плагин может стать источником уязвимостей для всего веб-сайта. Основное правило: никогда не доверяйте вводимым пользователями данным. Все данные, поступающие от пользователей или из внешних источников, должны быть проверены, очищены или обработаны специальными методами (например, с использованием механизмов эскапации) перед тем, как они будут сохранены в базе данных, переданы в файловую систему или отображены на странице.
Проверка и очистка данных
Валидация – это процесс проверки введенных данных на соответствие ожидаемому формату: например, на то, является ли оно адресом электронной почты, числом или находится ли в определенном диапазоне. WordPress предоставляет ряд вспомогательных функций для выполнения этой проверки. is_email(), absint()Процесс очистки заключается в удалении из данных всех незаконных или небезопасных символов на основе выполненной проверки. Для текстовых полей можно использовать специальные методы обработки текста. sanitize_text_field()。
// 在处理表单提交时
$user_input = $_POST['some_field'] ?? ''; // 使用空合并运算符避免未定义索引警告
// 清理输入
$clean_input = sanitize_text_field( $user_input );
// 验证是否是正整数
$clean_id = absint( $_POST['post_id'] );
if ( $clean_id <= 0 ) {
// 处理无效ID的错误
} Эскапирование данных перед выводом на экран.
Эскапирование – это процесс, обеспечивающий безопасную передачу данных в различные контексты (например, HTML, JavaScript, URL-адреса). Оно крайне важно для предотвращения атак типа XSS (кросс-сайтового скриптинга). WordPress предоставляет мощные функции для эскапирования данных.
* esc_html()Знак “:” используется для эскапирования HTML-кода, чтобы предотвратить его интерпретацию браузером (то есть чтобы HTML-теги не начали выполнять свои функции).
* esc_attr()Данный символ (`:`) используется для эскапирования значений атрибутов HTML-тегов.
* esc_url()Знак “:” используется для эскапирования URL-адресов.
* wp_kses_post()Разрешается безопасно выводить часть HTML-кода с использованием определенного набора правил.
// При выводе пользовательских данных на странице настроек или на фронт-энде
echo '<div class="notice">'`. esc_html($clean_input)`.'</div>'echo '<input type="hidden" value="' . esc_attr( $clean_input ) . '">'echo '<a href="/ru/' . esc_url( $user_url ) . '/">ссылка</a>'echo wp_kses_post($allowed_html_content); // Разрешены HTML-теги на уровне статьи Кроме того, при обработке запросов к базе данных следует всегда использовать классы, предназначенные для работы с базой данных WordPress. $wpdb Методы предобработки данных, или использование более продвинутых API… WP_QueryВ них встроена защита от взломов с использованием SQL-инъекций. При выполнении операций с файлами используйте соответствующие механизмы безопасности. wp_upload_dir()、wp_handle_upload() Используйте соответствующие API для обеспечения безопасности путей (URL-адресов).
Использование хуков (hooks) для достижения высокой расширяемости
Ядро системы плагинов WordPress основано на механизме хуков (hooks), который состоит из так называемых “действий” (actions) и “фильтров” (filters). Благодаря хукам плагины могут изменять поведение или данные WordPress без необходимости модификации основного кода, а также другие разработчики могут расширять функционал вашего плагина.
Рекомендуемое чтение Руководство по разработке тем для WordPress: Создание вашей первой пользовательской темы с нуля。
Назначение и создание действий-хуков (action hooks)
Акционные хаки (action hooks) выполняют определенный код в определенные моменты времени; при этом от них не ожидается возвращения какого-либо значения. Плагины могут использовать тысячи встроенных хаков, предоставляемых WordPress. init, wp_enqueue_scripts, save_postВы также можете создавать свои собственные хуки, которые другие разработчики смогут использовать.
Код, который монтируется на этот «хук», выглядит следующим образом:
// Автоматическое добавление баннера перед содержимым поста
function myplugin_prepend_content( $content ) {
if ( is_single() ) {
$custom_text = '<div class="myplugin-banner">Это рекламный блок.</div>';
$content = $custom_text . $content.
}
return $content.
}
add_filter( 'the_content', 'myplugin_prepend_content' ); Обратите внимание: хотя мы и изменили содержимое, для этого были использованы хаки фильтров (filter hooks). the_contentПотому что оно требует возвращения изменённого значения.
Создание пользовательских действий (хуков) для использования do_action Функция:
// 在你的插件代码中定义一个动作点
function myplugin_complete_task() {
// ... 执行一些任务 ...
// 发出自定义动作,允许其他代码在此处添加功能
do_action( 'myplugin_after_task_complete', $task_id, $result );
} Другие плагины или темы можно добавить следующим образом: add_action('myplugin_after_task_complete', 'callback', 10, 2) Ответь на это действие.
Принцип работы фильтровых хуков и примеры их использования
Фильтровые хуки используются для изменения данных перед их использованием. Они принимают одно значение и должны возвращать другое значение (которое может быть изменено). Таким образом плагины могут модифицировать текст, параметры или результаты запросов.
Используйте встроенные фильтры:
// 修改文章摘要的长度
function myplugin_excerpt_length( $length ) {
return 20; // 将摘要字数限制改为20字
}
add_filter( 'excerpt_length', 'myplugin_excerpt_length' ); Создание пользовательских фильтров и использование их хуков apply_filters Функция:
function myplugin_get_price( $product_id ) {
$base_price = get_post_meta( $product_id, 'price', true );
// 应用过滤器,允许其他代码动态修改价格(例如添加税费、折扣)
$final_price = apply_filters( 'myplugin_product_price', $base_price, $product_id );
return $final_price;
} Таким образом ваш плагин предоставляет гибкий интерфейс, позволяющий другим разработчикам легко изменять логику расчета цен без необходимости напрямого изменения исходного кода плагина.
Интернационализация плагинов и управление скриптовыми ресурсами
Зрелый плагин для WordPress должен поддерживать международную версию (иностранные языки), чтобы его можно было перевести на разные языки, а также должен эффективно управлять CSS- и JavaScript-ресурсами как на фронтенде, так и на бэкенде.
Реализация интернационализации плагина
Интернационализация достигается путем использования специальных функций для обработки всех текстовых строк, требующих перевода. Для этого необходимо выполнить два основных шага: загрузить файлы с переводами с помощью соответствующих инструментов и пометить в коде строки, которые нуждаются в переводе.
Во-первых, определённое в заголовке главного файла плагина. Text Domain(Например, my-first-pluginЭто ваш текстовый поля. Затем, при инициализации плагина (обычно…) init Хук (hook) используется для выполнения определенных действий по вызову. load_plugin_textdomain Функция для загрузки файлов с переводами.
function myplugin_load_textdomain() {
load_plugin_textdomain(
'my-first-plugin', // 文本域,必须与文件头一致
false, // 已弃用参数
dirname( plugin_basename( __FILE__ ) ) . '/languages' // 语言文件存放的相对路径
);
}
add_action( 'init', 'myplugin_load_textdomain' ); В коде используется… __() Переведите и верните строку, используя _e() Переведите и выведите строку напрямую.
$settings_title = __( 'My Plugin Settings', 'my-first-plugin' );
_e( 'Hello World!', 'my-first-plugin' ); Разработчики могут использовать это. Poedit Такие инструменты, как Localize, извлекают эти строки из исходного кода и генерируют их. .pot Файл шаблона. .po и .mo Файл хранится в плагине. /languages/ Внутри каталога.
Правильное внедрение CSS и JavaScript.
Никогда не кодируйте напрямую в файлах PHP. <link> или <script> Для загрузки ресурсов используются специальные теги. WordPress предоставляет единую систему управления очередями (enqueue), которая обеспечивает контроль зависимостей между ресурсами, их версий и оптимальное время загрузки.
Для фоновых ресурсов используйте admin_enqueue_scripts Крючок.
function myplugin_admin_scripts( $hook ) {
// 只在特定插件设置页面加载
if ( $hook != 'toplevel_page_myplugin-settings' ) {
return;
}
wp_enqueue_style(
'myplugin-admin-style', // 句柄
plugins_url( 'css/admin-style.css', __FILE__ ), // 文件URL
array(), // 依赖
'1.0.0' // 版本号,可用于强制浏览器更新缓存
);
wp_enqueue_script(
'myplugin-admin-script',
plugins_url( 'js/admin-script.js', __FILE__ ),
array( 'jquery' ), // 依赖jQuery
'1.0.0',
true // 在页脚加载
);
}
add_action( 'admin_enqueue_scripts', 'myplugin_admin_scripts' ); Что касается ресурсов фронтенда, их следует использовать… wp_enqueue_scripts Крючки (hooks) работают по аналогичной логике. Это обеспечивает упорядоченное загрузочное выполнение ресурсов, предотвращает конфликты между ними и позволяет использовать кэш браузера.
резюме
Разработка плагинов для WordPress представляет собой систематический процесс, который начинается с создания основного файла, соответствующего стандартам, и включает в себя создание интерфейса для администрирования, обеспечение безопасности данных, использование встроенных механизмов (хуков) и поддержку международизации. Соблюдение лучших практик, особенно строгих правил безопасности данных и глубокого понимания механизмов работы хуков, является ключом к созданию стабильных, безопасных и масштабируемых коммерческих плагинов. Правильное использование API настроек и средств управления скриптами позволяет значительно повысить профессионализм плагина и улучшить пользовательский опыт. Разработчики всегда должны учитывать возможность перевода кода, чтобы расширить сферу применения плагина.
Часто задаваемые вопросы
Какие элементы должен включать в себя самый простой плагин для WordPress?
Самый простой плагин требует всего одного PHP-файла, который должен содержать стандартные комментарии, характерные для плагинов. Самым важным из этих комментариев является строка с названием плагина (“Plugin Name”). В этом файле вы можете напрямую писать PHP-код или добавлять новые функции с помощью хуков (hooks).
Например, плагин, содержащий лишь короткий код, который выводит строку “Hello World”, также сможет работать с использованием всего одного такого файла.
Как плагины взаимодействуют с базой данных WordPress?
Рекомендуется использовать встроенные классы для работы с базами данных в WordPress. $wpdbОно предоставляет безопасные способы выполнения запросов к данным, особенно… prepare Этот метод позволяет эффективно предотвратить атаки типа SQL-инъекций.
Для большинства операций с данными (например, получения статей или работы с метаданными) рекомендуется использовать расширенные функции, предоставляемые WordPress. get_posts(), WP_Query, get_post_meta(), update_post_meta() Эти функции уже обеспечивают защиту от угроз безопасности и поддерживают механизмы кэширования на низком уровне. Что касается пользовательских структур данных, разработчики могут создавать соответствующие таблицы при активации плагина.
Где мне можно найти все доступные действия (actions) и фильтры (filters), а также их хэнги (hooks)?
Официальные документации WordPress являются лучшим источником информации о специальных механизмах («хуках»), позволяющих расширять функциональность сайта. Кроме того, разработчики также могут найти нужные хуки, выполнив прямой поиск в исходном коде самой системы WordPress.
Откройте корневой каталог WordPress в кодовом редакторе и выполните поиск нужного файла или информации. do_action или apply_filters При вызове функции можно найти все определенные хаки (hooks) и их параметры. Многие онлайн-ресурсы также содержат списки наиболее часто используемых хаков.
Как отладить код моего плагина для WordPress?
Во-первых, убедитесь, что у вас… wp-config.php В файле включен режим отладки. define( 'WP_DEBUG', true );Это позволит отображать ошибки и предупреждения PHP. Чтобы предотвратить видимость ошибочных сообщений для посетителей, их можно скрыть одновременно. define( 'WP_DEBUG_DISPLAY', false ); А также записывайте ошибки в файл журнала:define( 'WP_DEBUG_LOG', true );。
Во-вторых, используйте error_log() Функция записывает пользовательские сведения о отладке в файл журнала. Для сложных структур данных (например, массивов, объектов) можно использовать сочетание различных методов для эффективной передачи информации в файл журнала. print_r() или var_dump() Информация должна выводиться только после входа в систему администратора, чтобы предотвратить её утечку. Для более эффективного отладки с использованием точек остановки и отслеживания стека вызовов функций рекомендуется использовать профессиональные инструменты отладки PHP, такие как Xdebug.
Что дальше, что дальше?
Расширенное чтение и практические знания
Следующие статьи связаны с темой этой статьи и подходят для дальнейшего углубленного чтения. Зачастую лучше начать с той статьи, которая наиболее близка к вашей текущей проблеме, а затем постепенно переходить к другим темам.
- Как установить и настроить SSL-сертификат для вашего веб-сайта на WordPress?
- Руководство по настройке оптимизации кэширования всего сайта в WooCommerce: повышение скорости и конверсии электронных магазинов на базе WordPress
- Полное руководство по установке WooCommerce и выбору тем для использования в 2026 году
- Полное руководство по созданию сайтов на платформе WooCommerce: от нуля до создания профессионального электронного магазина
- Значение и ценность WordPress