Основи розробки плагінів для WordPress
Плагіни WordPress – це незалежні збірки PHP-скриптів, які розширюють функціонал основної версії WordPress. Вони дозволяють розробникам додавати нові можливості до веб-сайту чи змінювати існуючу поведінку системи без необхідності модифікації основних файлів WordPress. Плагін може бути дуже простим (складається лише з одного файлу) або складним (містить кілька файлів, скриптів та таблиць стилів).
Зрозуміти основну структуру плагіна.
Найважливішим файлом плагіна є головний файл плагіна. Цей файл має містити спеціальну заголовкову коментарну частину (plugin header), за допомогою якої WordPress ідентифікує ваш плагін. Заголовок плагіна зазвичай розташовується на початку файлу та містить інформацію про назву плагіна, опис, версію, автора тощо. Наприклад, головний файл плагіна під назвою “Мій привітній плагін” („My Greeting Plugin“) може виглядати ось так: my-greeting-plugin.php Початок може виглядати ось так:
<?php
/**
* Plugin Name: 我的问候插件
* Plugin URI: https://example.com/my-greeting-plugin
* Description: 一个简单的插件,用于在网站前台显示问候语。
* Version: 1.0.0
* Author: 开发者名称
* License: GPL v2 or later
* Text Domain: my-greeting-plugin
*/ Після написання заголовка плагіна ви можете розпочати розробку його функціонального коду. Весь код плагіна має бути обгорнутий у умовні оператори, щоб запобігти прямому доступу до нього, який може призвести до проблем з безпекою, а також переконатися, що код виконується лише у середовищі WordPress.
Рекомендуємо до прочитання. Від нуля: створення вашого першого плагіна для WordPress。
Каталог плагінів та організація файлів
Для плагінів із простими функціями може бути достатньо одного PHP-файлу. Однак зі збільшенням кількості функцій важливо належним чином організувати код. Типовий каталог плагіна може містити наступну структуру:
- my-plugin/ (Головний каталог)
- my-plugin.php (Основний файл плагіна)
- uninstall.php (Скрипт для видалення програми)
- includes/ Каталог, у якому зберігаються класи чи функції, що виконують основні функції програми.
- admin/ Каталог, у якому зберігається код, пов’язаний з адмініструванням бекенду
- public/ Каталог, у якому зберігається код, пов’язаний з фронтендом веб-сайту
- assets/ Каталог, у якому зберігаються ресурси JavaScript, CSS та зображення
- languages/ Каталог, у якому зберігаються файли з міжнародними перекладами
Ця модульна структура робить код легшим для обслуговування, тестування та співпраці.
Основні концепції розробки: хаки та фільтри
Ядро розробки плагінів для WordPress – це система “хуків” (Hooks). Хуки дозволяють вставляти власний код у певні моменти виконання системи WordPress, що дає можливість змінювати або покращувати її стандартну поведінку. Існує два основні типи хуків: хуки дій (Action Hooks) та хуки фільтрів (Filter Hooks).
Використовуйте дії-хаки (action hooks) для додавання нових функцій.
Акційні хаки виконуються під час певних подій, таких як публікація статті, увійшов користувач або завантаження сторінки керування. Вони не повертають жодних значень тому, хто їх викликав, а призначені для виконання певної дії. Ви можете їх використовув add_action() Функція “підключає” себе до певного механізму виконання дій (акційного хака).
Наприклад, якщо ви хочете додати рядок власного тексту у футер передньої сторінки веб-сайту, ви можете скористатися відповідними інструментами або функціями, які надаються системою управління сайтом. wp_footer Цей хак для виконання певної дії. У основному файлі плагіна ви можете написати щось на кшталт цього:
Рекомендуємо до прочитання. Посібник з розробки плагінів для WordPress: створення власних функцій з нуля。
Функція myplugin_add_footer_text() {
echo '<p style="text-align:center;">Дякуємо, що використовуєте наш веб-сайт!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); Коли WordPress виконує… wp_footer Коли використовується ця функція, система автоматично звертається до ваших зареєстрованих даних. myplugin_add_footer_text Функція.
Використовуйте хаки фільтрів для модифікації вмісту.
Фільтрові хаки (filter hooks) призначені для модифікації даних. Вони надають вам можливість змінити дані перед тим, як вони будуть відправлені до бази даних чи браузера. Функції-фільтри мають повертати модифіковані значення. add_filter() Функція для реєстрації фільтрів.
Поширеним прикладом є зміна заголовків статей. Припустимо, ви хочете автоматично додавати до всіх заголовків статей символ торгової марки ™. Для цього можна використовувати відповідні програмні засоби чи скрипти. the_title Фільтр:
function myplugin_modify_post_title( $title, $post_id ) {
// 确保只在主循环且不是管理后台中修改
if ( ! is_admin() && in_the_loop() ) {
$title = $title . ' ™';
}
return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 ); Параметри тут 10 Це пріоритет (чим менший номер, тим завдання виконується раніше).2 Це означає, що наша функція-корекція (callback function) приймає два параметри.$title 和 $post_id)。
Створити сторінку керування плагінами
Багато плагінів потребують наявності сторінки налаштувань у адміністративному інтерфейсі WordPress, щоб користувачі могли встановлювати необхідні параметри. WordPress надає розширену API для створення головних та підменю.
Додати верхній меню керування
Ви можете використовувати ці можливості. add_menu_page() Функція створює незалежний меню для керування вашим плагіном. Цій функції потрібно кілька параметрів, серед яких: заголовок сторінки, заголовок меню, права користувача, псевдонім меню, функція-повернення (callback function) тощо.
Рекомендуємо до прочитання. Повний посібник з розробки плагінів для WordPress: від початківців до досвідчених фахівців。
Наведений нижче код демонструє, як створити просту сторінку з верхнім меню:
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限(管理员)
'myplugin-settings', // 菜单别名(URL中的slug)
'myplugin_settings_page', // 用于输出页面内容的回调函数
'dashicons-admin-generic', // 菜单图标(使用Dashicons)
30 // 菜单位置
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// 定义输出页面内容的回调函数
function myplugin_settings_page() {
?>
<div class="wrap">
<h1><p><strong> <p><strong></h1>
<form action="/uk/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出设置字段和安全 nonce 字段
settings_fields( 'myplugin_options' );
do_settings_sections( 'myplugin-settings' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="uk"/></form>
</div>
<?php
} Створення опцій за допомогою API налаштувань
Ручне оброблення подань форм та їх перевірки є складним та небезпечним процесом. API, передбачений у WordPress, надає стандартизований спосіб реєстрації, перевірки та зберігання налаштувань. Для цього використовуються три основні функції:register_setting()、add_settings_section() 和 add_settings_field()。
Наведений нижче приклад демонструє, як зареєструвати групу налаштувань та текстове поле:
function myplugin_settings_init() {
// 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
register_setting(
'myplugin-settings', // 选项组,通常与页面别名一致
'myplugin_options', // 存储在 wp_options 表中的选项名
'myplugin_sanitize_callback' // 可选的清理回调函数
);
// 在页面中添加一个区域
add_settings_section(
'myplugin_section_main', // 区域的ID
'主要设置', // 区域标题
'myplugin_section_callback', // 区域描述的回调函数
'myplugin-settings' // 页面别名
);
// 向区域中添加一个字段
add_settings_field(
'myplugin_field_greeting', // 字段ID
'问候语', // 字段标签
'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
'myplugin-settings', // 页面别名
'myplugin_section_main', // 区域ID
[ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
$options = get_option( 'myplugin_options' );
$value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
} Безпека плагінів та найкращі практики їх використання
Розробіть популярний плагін, де безпека та якість коду є найважливішими критеріями. Небезпечні плагіни можуть стати воротами для атак на веб-сайт.
Проверка даних, їх очищення та ескапування
Ніколи не довіряйте даним, введеним користувачем, або даним з бази даних. Перед обробкою будь-яких даних необхідно їх перевірити (Validation), очистити (Sanitization) та виконати процедуру ескапування (Escaping).
- Перевірка: Перевіряється, чи відповідають дані очікуваному формату чи правилам (наприклад, чи є це електронна адреса, число тощо). Для цього використовуються такі функції, як…
is_email()、ctype_digit()або регулярний вираз. - Очищення даних: перед збереженням у базу даних або використанням у інших цілях необхідно видалити з них небезпечні чи непотрібні елементи. Для різних типів даних слід використовувати відповідні функції очищення.
sanitize_text_field()(Використовується для тексту)sanitize_email()(Для електронної пошти)intval()(Використовується для цілих чисел). - Ескапування: Під час виведення даних у HTML, JavaScript або URL-адреси переконайтеся, що вони були безпечно закодовані, щоб запобігти атакам типу XSS (Cross-Site Scripting). Для цього використовуйте відповідні функції.
esc_html()、esc_attr()、esc_url()和wp_kses()。
Наприклад, під час зберігання та виведення опцій привітань, які ми створили раніше:
// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
$sanitized = [];
if ( isset( $input['greeting'] ) ) {
// 清理文本输入
$sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
}
return $sanitized;
}
// 在前台输出问候语时
function myplugin_display_greeting() {
$options = get_option( 'myplugin_options' );
$greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
// 在输出到HTML前进行转义
echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
} Реалізація підтримки міжнародної версії продукту
Щоб ваш плагін міг використовуватися користувачами по всьому світу, необхідно підтримувати інтернаціоналізацію (i18n). Це означає, що всі текстові елементи, призначені для користувачів, мають бути обгорнуті у функції для перекладу, щоб їх можна було перекласти на інші мови
WordPress використовує фреймворк GNU gettext для підтримки перекладу. Основною функцією, відповідальною за переклад, є… __()(Використовується для отримання перекладеного рядка) і _e()Вам потрібно встановити унікальне ім’я текстового домену для вашого плагіна; це ім’я вже визначено у заголовку плагіна.
У коді ви повинні використовувати це наступним чином:
// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );
// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );
// 带占位符的翻译
printf(
__( '欢迎,%s!', 'my-greeting-plugin' ),
esc_html( $username )
); Потім ви можете використовувати такі інструменти, як Poedit, щоб вилучити ці рядки з коду та створити необхідні файли. .pot Це шаблонний файл, за допомогою якого перекладачі можуть створювати тексти різних мов. .po 和 .mo Файл потрібно розмістити у плагіні. /languages/ У каталозі.
підсумок
Розробка плагінів для WordPress є потужною та гнучкою сферою, яка дозволяє розробникам глибоко налаштовувати та розширювати функціонал цього системного розгортку. Від розуміння основної структури плагінів та системи хуків до створення інтерактивних інтерфейсів керування, а також дотримання суворих правил безпеки та інтернаціоналізації – кожен крок є ключовим для створення якісних, легких у обслуговуванні та популярних плагінів. Пам’ятайте, що суть полягає у ефективному використанні розширених можливостей API WordPress, а не у їх обході. Організовуючи код за принципами модульності, ретельно обробляючи дані та з самого початку передбачаючи підтримку кількох мов, ваш плагін буде не лише функціональним, а й безпечним, професійно написаним та готовим до глобального використання.
Часті запитання
Як мінімум, які файли потрібні для плагіна WordPress?
Для плагіна достатньо щонайменше одного PHP-файла. Якщо цей файл містить правильні коментарі для визначення плагіна (Plugin Header Comments), WordPress зможе ідентифікувати його та активувати у списку плагінів у своєму бекенді. У цьому єдиному файлі може знаходитися весь код плагіна.
Як уникнути конфліктів між назвами плагінів?
Щоб уникнути конфліктів між назвами функцій, класів чи констант та назвами інших плагінів чи тем, вам слід використовувати унікальні префікси. Зазвичай ці префікси можуть базуватися на назві вашого плагіна чи його скороченні. Наприклад, якщо ваш плагін називається “Awesome Slider”, ви можете використовувати префікс “aws”. as_ 或 awesome_slider_ Як префікс для всіх функцій та класів. Для назв класів можна розглянути більш унікальну структуру, засновану на принципах іменування просторів імен.
Як очистити дані з бази даних під час видалення плагіна?
WordPress пропонує два способи виконання завдань очищення після видалення плагінів. Перший спосіб – це реєстрація функції-хака („hook“) для виконання необхідних дій під час видалення плагіна; це можна зробити у вашому основному файл register_uninstall_hook() Функція призначена для виклику керуючої функції (callback), яка видаляє таблиці даних та параметри, створені плагіном. Другий, і більш рекомендований, спосіб – це створення окремого скрипту для виконання цієї операції. uninstall.php Файл. Коли користувач видаляє плагін через панель керування WordPress, система автоматично виконує код, що знаходиться у цьому файлі. У цьому файлі необхідно перевірити значення констант. WP_UNINSTALL_PLUGIN Чи були всі плагіни визначені, а потім їх дані безпечно видалені?
Як мені додати файли JavaScript та CSS до свого плагіна?
Вам слід використовувати функції кешування (кіїв), які надає WordPress, для правильного додавання скриптів та таблиць стилів, а не виводити їх безпосередньо у HTML-код. <script> 或 <link> Мітки. Для фронтенд-ресурсів використовуйте мітки для кращого організаційного управління ними. wp_enqueue_script() 和 wp_enqueue_style() Функції, і прив'язати їх до wp_enqueue_scripts На дієвих гачках. Для ресурсів інтерфейсу адміністрування вони монтуються туди. admin_enqueue_scripts Це забезпечує правильне оброблення залежностей та уникнення багаторазового завантаження одних і тих самих ресурсів.
Як виконувати налагодження під час розробки плагінів?
По-перше, переконайтеся, що у вас є все необхідне для… wp-config.php У файлі увімкніть режим налагодження WordPress. WP_DEBUG Стала величина встановлена як trueВи також можете увімкнути все одночасно. WP_DEBUG_LOG(Записати помилку у файл) і WP_DEBUG_DISPLAY(Помилка відображається на екрані). Використовуйте цю інформацію для вирішення проблеми. error_log() Функція записує власну інформацію про налагодження до серверного журналу помилок. Крім того, для налагодження JavaScript-коду та AJAX-запитів можна використовувати консоль та панель мережевих операцій у розробничих інструментах браузера. Для складної логіки рекомендується використовувати професійні інструменти налагодження PHP, такі як Xdebug.
Наступний крок, що робити далі?
Для подальшого читання та практичних знань
Наступні матеріали пов'язані з темою цієї статті і можуть бути корисними для подальшого вивчення. Зазвичай краще починати з статей, які найбільш тісно пов'язані з вашим поточною проблемою, а потім поступово переходити до суміжних тем.
- Як вибрати та налаштувати ідеальну тему для вашого WordPress-сайту?
- Посібник з розробки плагінів для WordPress: створіть свій перший власний плагін з нуля
- Що таке дочірня тема WordPress?
- Як стати розробником плагінів для WordPress: повний посібник від нуля
- Від нуля до одиниці: Повний посібник та практичні поради щодо створення професійних веб-сайтів за допомогою WordPress