Введение в разработку плагинов для 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 заключается в их гибкой системе хуков действий и фильтров. Хуки действий позволяют выполнять пользовательский код в определённые моменты, например, после публикации статьи или при загрузке административного меню. Хуки фильтров же позволяют изменять данные, передаваемые в процессе.
Обычный сценарий — автоматическое добавление текста в конец статьи. Это можно сделать с помощью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;
}
?>
<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>
<?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()Такие функции…
При обработке не-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Эти данные хранятся в файле и не отображаются для пользователей на переднем плане.
Используя такие инструменты, как плагин Query Monitor, можно в режиме реального времени просматривать запросы к базе данных, выполнение хуков, ошибки PHP и данные о производительности. Для отладки логики можно использовать комбинацию этих инструментов.error_log()Выполняйте пошаговое отслеживание с помощью таких профессиональных отладчиков PHP, как функция Xdebug.
Как мне добавить таблицу пользовательской базы данных для моего плагина?
Добавление пользовательских таблиц следует рассматривать только в том случае, если структура основных таблиц WordPress не отвечает вашим требованиям. Вы можете создавать таблицы при активации плагина, обычно с помощью регистрации функции, которая выполняется при активации плагина.
В этой функции используетсяdbDelta()Функция для безопасного создания или обновления структуры таблицы. Эта функция требует полной информации.CREATE TABLE SQL-запросы, а также обработка изменений структуры таблиц осуществляются очень осторожно. Необходимые вам SQL-запросы можно получить с помощью глобальных переменных.$wpdbВыполните это.
Как сделать так, чтобы мой плагин поддерживал несколько языков (интернационализацию)?
Во-первых, определите это в комментариях в верхней части главного файла плагина.Text DomainИ использовать его при загрузке плагина.load_plugin_textdomain()Функция загружает файл перевода. Все строки в плагине, которые требуют перевода, используют__()(вернуть строку перевода)или_e()(Непосредственно выводим строку для перевода) Оберните её в функцию. После этого вы можете использовать такие инструменты, как Poedit, для генерации перевода..potШаблонные файлы, предназначенные для переводчиков, позволяющие им создавать тексты на определённых языках..poи.moДокумент.
Что дальше, что дальше?
Расширенное чтение и практические знания
Следующие статьи связаны с темой этой статьи и подходят для дальнейшего углубленного чтения. Зачастую лучше начать с той статьи, которая наиболее близка к вашей текущей проблеме, а затем постепенно переходить к другим темам.
- Как выбрать и настроить идеальную тему для WordPress, подходящую именно вам?
- Руководство по разработке плагинов для WordPress: Создайте свой первый пользовательский плагин с нуля
- Как стать разработчиком плагинов для WordPress: полное руководство от нуля
- От нуля до один: Полное руководство и практические советы по созданию профессиональных сайтов с использованием WordPress
- Полное руководство по разработке плагинов для WordPress: от основ до мастерства создания профессиональных расширений