Основы разработки плагинов для WordPress и настройка среды разработки.
Основная цель разработки плагинов для WordPress — расширение основных функций платформы, и всё начинается с хорошо структурированной среды разработки. Плагин по сути представляет собой один или несколько PHP-файлов, размещенных в каталоге установки WordPress./wp-content/plugins/В папке. Каждый плагин должен иметь главный файл, в котором находится блок комментариев в верхней части, представляющий собой “удостоверение личности” плагина, используемое для предоставления базовой информации о плагине системе WordPress.
Типичный заголовок плагина выглядит следующим образом:
<?php
/**
* Plugin Name: 我的第一个WordPress插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单插件。
* Version: 1.0.0
* Author: 开发者名称
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Эта аннотация очень важна, поскольку она позволяет плагину появиться на странице управления плагинами в административной панели WordPress. В частности,Text DomainИспользуется для интернационализации, чтобы подготовиться к последующей работе по переводу.
Рекомендуемое чтение Полное руководство по разработке плагинов для WordPress: практическое руководство с нуля до публикации в Интернете。
Настройка локальной среды разработки.
Перед началом кодирования рекомендуется настроить локальную среду разработки, которая будет эффективной и безопасной. Для этого можно использовать такие инструменты, как XAMPP, MAMP, Local by Flywheel или Docker, чтобы создать локальный сервер, включающий Apache/Nginx, MySQL и PHP. Убедитесь, что ваша версия PHP соответствует требованиям текущей основной версии WordPress (обычно рекомендуется PHP 7.4 или выше). Кроме того, вwp-config.phpОткройте его на китайском (упрощенном) языке.WP_DEBUGЭта модель помогает быстро выявлять и исправлять ошибки в процессе разработки.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // 将错误日志保存到 /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息 Основная архитектура плагина и механизм хуков.
Понимание механизма хуков в WordPress является ключевым для разработки плагинов. Хуки позволяют вашему плагину “встраиваться” в основной процесс WordPress в определённые моменты и выполнять пользовательский код. Хуки делятся на два основных типа: действия (Actions) и фильтры (Filters).
Хокки действий и хокки фильтров
Акционные хуки (Action Hooks) позволяют выполнять код при возникновении определённого события. Например, отправлять уведомление по электронной почте после публикации статьи или записывать в журнал событие входа пользователя в систему. Используйтеadd_action()Функция для регистрации вашей функции в определённом хуке действия.
function myplugin_send_notification( $post_id ) {
// 当文章发布时,执行发送通知的逻辑
wp_mail( '[email protected]', '新文章已发布', '文章ID:' . $post_id );
}
// 将 myplugin_send_notification 函数挂载到 ‘publish_post’ 这个动作钩子上
add_action( 'publish_post', 'myplugin_send_notification' ); Фильтры-хуки (Filter Hooks) позволяют изменять данные, передаваемые в процессе. Например, можно изменить отображение содержимого статьи или изменить возвращаемое значение функции. Используйтеadd_filter()Используйте функцию для регистрации фильтров.
функция myplugin_modify_content( $content ) {
// Добавляем пользовательский текст в конец содержимого статьи
$custom_text = ' <'<p><em>Спасибо за прочтение! Эта статья была добавлена моим плагином.</em></p>'Функция myplugin_modify_content добавлена в фильтр ‘the_content’.
add_filter( 'the_content', 'myplugin_modify_content' ); Создание главного класса плагина.
Хотя простые плагины могут состоять всего из нескольких функций, для обеспечения модульности и удобства обслуживания кода, а также во избежание конфликтов с именами настоятельно рекомендуется использовать объектно-ориентированный подход (OOP) и заключить функции плагина в главный класс. Это лучшая практика разработки современных плагинов для WordPress.
Рекомендуемое чтение Введение в разработку тем для WordPress: создание своей первой темы с нуля.。
Класс My_First_Plugin {
public function __construct() {
// Зарегистрируем все хуки в конструкторе
add_action( 'init', array( $this, 'register_shortcode' ) );
add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
}
public function register_shortcode() {
add_shortcode( 'greeting', array( $this, 'render_greeting' ) );
}
public function render_greeting( $atts ) {
return '<h3>Привет, WordPress!</h3>';
}
public function add_admin_page() {
add_menu_page(
'我的插件设置',
'我的插件',
'manage_options',
'my-plugin-settings',
array( $this, 'render_admin_page' )
);
}
public function render_admin_page() {
echo '<div class="wrap"><h2>Страница настроек плагина.</h2><p>Это интерфейс администрирования.</p></div>';
}
}
// 初始化插件
new My_First_Plugin(); Создание административного интерфейса и коротких кодов.
Для полнофункционального плагина обычно требуется взаимодействие с пользователем, включая предоставление страницы настроек для администратора сайта и простых способов вызова функций на переднем плане для редакторов контента.
Создание страницы настроек административной панели.
WordPress предоставляет обширный API для создания меню и подменю в административной панели, например:add_menu_page()、add_submenu_page()На странице настроек вы можете использовать API настроек WordPress для безопасной регистрации, проверки и сохранения параметров, что намного удобнее, чем делать это вручную.$_POSTДанные должны быть гораздо более безопасными и надежными.
public function add_admin_page() {
add_options_page(
'我的插件选项', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-plugin-options', // 菜单slug
array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
);
// 注册设置、节和字段
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function register_settings() {
register_setting( 'myplugin_options_group', 'myplugin_option_name' );
add_settings_section( 'myplugin_section_id', '主要设置', null, 'my-plugin-options' );
add_settings_field( 'myplugin_field_id', '示例字段', array( $this, 'field_html' ), 'my-plugin-options', 'myplugin_section_id' );
}
public function field_html() {
$option = get_option( 'myplugin_option_name' );
echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}
public function options_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">
<?php
settings_fields( 'myplugin_options_group' );
do_settings_sections( 'my-plugin-options' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="ru"/></form>
</div>
<?php
} Реализовать функцию коротких кодов.
Короткие коды — это отличный способ, позволяющий пользователям легко встраивать функции плагинов в статьи или страницы. Используйтеadd_shortcode()Функция регистрируется, а её обратный вызов получает свойство ($attsи контент ($contentОн получает параметры и возвращает окончательный контент, который необходимо отобразить.
общественная функция register_shortcodes() {
add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}
public function render_latest_posts( $atts ) {
// Устанавливаем значения по умолчанию и объединяем переданные пользователем атрибуты с помощью shortcode_atts
$attributes = shortcode_atts( array(
'count' => 5,
'category' => '',
), $atts );
$args = array(
'posts_per_page' => intval( $attributes['count'] ),
'post_status' => 'publish',
);
if ( ! empty( $attributes['category'] ) ) {
$args['category_name'] = sanitize_text_field( $attributes['category'] );
}
$query = new WP_Query( $args );
$output = ' общественная функция register_shortcodes() {
add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}
public function render_latest_posts( $atts ) {
// Устанавливаем значения по умолчанию и объединяем переданные пользователем атрибуты с помощью shortcode_atts
$attributes = shortcode_atts( array(
'count' => 5,
'category' => '',
), $atts );
$args = array(
'posts_per_page' => intval( $attributes['count'] ),
'post_status' => 'publish',
);
if ( ! empty( $attributes['category'] ) ) {
$args['category_name'] = sanitize_text_field( $attributes['category'] );
}
$query = new WP_Query( $args );
$output = '<ul>';
while ( $query->have_posts() ) {
$query->the_post();
$output .= '<li><a href="/ru/' . get_permalink() . '/">'. get_the_title() . '</a></li>';
}
wp_reset_postdata();
$output .= '</ul>'функция возвращает текст, полученный в результате перевода текста на русский язык с помощью сервиса $. Безопасность, производительность и готовность к публикации плагинов.
На заключительном этапе разработки вам необходимо убедиться, что плагин безопасен, эффективен и легко распространяется. Пренебрежение этими аспектами может привести к утечкам данных, замедлению работы сайта или негативному пользовательскому опыту.
Безопасность и проверка данных.
Любые данные, полученные от пользователя или из внешних источников (например, параметры URL, формы для отправки данных, базы данных), не заслуживают доверия. Необходимо использовать ряд функций, предоставляемых WordPress, для проверки, очистки и экранирования этих данных.
* Проверка (Validation): проверяем, соответствуют ли данные ожидаемому формату (например, является ли это адресом электронной почты или числом), используяis_email()、intval()и т.д.
* Очистка (Sanitization): перед сохранением данных в базе данных удаляются небезопасные символы, используетсяsanitize_text_field()、sanitize_email()、wp_kses_post()и т.д.
* Эскапирование (Escaping): кодирование данных перед их выводом в HTML, JavaScript или URL для предотвращения атак XSS, используя <esc_html()、esc_js()、esc_url()、esc_attr()и т.д.
Для работы с базой данных обязательно используйте$wpdbМетоды, предоставляемые классом, и их использование.prepare()Выполняйте параметризованные запросы для предотвращения SQL-инъекций.
Рекомендуемое чтение Принципы ускорения CDN и практическое руководство: как выбрать лучшую сеть доставки контента для вашего сайта。
Оптимизация производительности и последующее обслуживание.
Производительность является ключевым фактором пользовательского опыта. Избегайте выполнения длительных запросов или обработки при каждой загрузке страницы. Для данных, которые не часто меняются, используйте API кэширования временных данных (Transients API) в WordPress для их хранения.
$data = get_transient( 'myplugin_expensive_data' );
if ( false === $data ) {
$data = // ... 执行复杂的数据库查询或远程API调用 ...
set_transient( 'myplugin_expensive_data', $data, HOUR_IN_SECONDS ); // 缓存1小时
} Чтобы добавить поддержку интернационализации и локализации для плагина, используйте__()、_e()Эта функция обертывает весь текст, видимый пользователям, и передаёт его черезload_plugin_textdomain()Загрузите языковой файл. Кроме того, необходимо правильно спланировать жизненный цикл плагина и написать код для его активации.register_activation_hook), отключить (register_deactivation_hookи удалениеregister_uninstall_hookЛогика обработки хуков, используемая для создания/удаления таблиц базы данных, очистки параметров и т. д.
Подготовка к публикации: документация и упаковка.
Перед публикацией создайте подробныйreadme.txtДокументация должна соответствовать официальным требованиям WordPress, включая описание плагина, инструкции по установке, часто задаваемые вопросы, журнал обновлений и т. д. Это будет страница с описанием вашего плагина в каталоге плагинов WordPress. Наконец, убедитесь, что структура каталога вашего плагина четкая, содержит только необходимые файлы и упакована в стандартный ZIP-формат.
резюме
Разработка плагинов для WordPress — это процесс превращения идей в функциональность, основанный на глубоком понимании базовой архитектуры WordPress (особенно механизма хуков). Первым шагом является настройка среды, написание базового заголовка плагина и овладение хуками действий и фильтров. Использование объектно-ориентированного программирования для организации кода значительно повышает удобство обслуживания проекта. Создание безопасного интерфейса административной панели с помощью API настроек и предоставление гибких функций на переднем плане с помощью коротких кодов являются основными способами взаимодействия плагина с пользователями. Наконец, постоянное применение лучших практик в области безопасности (проверка, очистка, эскейпинг), производительности (кэширование, оптимизация запросов) и интернационализации, а также подготовка хорошей документации помогут создать профессиональный, надежный и популярный плагин для WordPress.
Часто задаваемые вопросы
Какие языки программирования необходимо знать для разработки плагинов для WordPress?
Основное требование — это хорошее знание PHP, поскольку сам WordPress, а также его плагины и темы написаны на этом языке. Также необходимо иметь базовые знания HTML, CSS и JavaScript для создания пользовательского интерфейса и логики взаимодействия плагинов. Если речь идет о сложных операциях с базой данных, то базовые знания SQL также обязательны.
Как избежать конфликтов между плагином, который я разработал, и другими плагинами?
Основной метод — обеспечить уникальность идентификаторов, таких как названия функций, классов, переменных и т. д. Лучшая практика — использовать объектно-ориентированное программирование и заключить весь код в один класс. Для функций и глобальных переменных можно использовать уникальные префиксы, например, префиксы с аббревиатурами плагинов или названиями, например:myplugin_function_nameилиMyPlugin_ClassName。
Почему мой плагин добавил меню в фоновом режиме, но на странице отображается сообщение “У вас недостаточно прав для доступа к этой странице”?
Это связано с тем, что при вызовеadd_menu_page()При использовании таких функций, как , параметр Capability, указывающий права доступа, установлен неправильно. Необходимо убедиться, что третий параметр (права доступа) соответствует роли текущего пользователя. Для страниц настроек, доступ к которым разрешен только администраторам, обычно используется следующая команда:‘manage_options’Вы можете снова использовать его в обработчике событий.current_user_can( ‘manage_options’ )Проведите проверку.
Как добавить поддержку перевода для моего плагина?
Во-первых, правильно установите параметры в заголовке главного файла плагина.Text Domain(Например,my-pluginЗатем используйте__( ‘Text’, ‘my-plugin’ )или_e( ‘Text’, ‘my-plugin’ )Функция обертывает все строки, которые необходимо перевести. В конце концов, это происходит при инициализации плагина (например, в <).initИспользуется во время выполнения действия.load_plugin_textdomain()Функция для загрузки языковых файлов. Вы можете использовать такие инструменты, как Poedit, для их создания..potШаблонные файлы и.po/.moПереводите документы.
Что дальше, что дальше?
Расширенное чтение и практические знания
Следующие статьи связаны с темой этой статьи и подходят для дальнейшего углубленного чтения. Зачастую лучше начать с той статьи, которая наиболее близка к вашей текущей проблеме, а затем постепенно переходить к другим темам.
- Руководство по созданию веб-сайтов для начинающих: от основ до полного понимания всего процесса разработки современных веб-проектов
- Как выбрать и настроить идеальную тему для WordPress, подходящую именно вам?
- Руководство по разработке плагинов для WordPress: Создайте свой первый пользовательский плагин с нуля
- Как стать разработчиком плагинов для WordPress: полное руководство от нуля
- От нуля до один: Полное руководство и практические советы по созданию профессиональных сайтов с использованием WordPress