Создание собственного плагина WordPress — важный навык для любого разработчика, который хочет расширить функциональность своего сайта без правки ядра. В этой статье мы подробно разберём, как создать плагин с применением hooks — actions и filters, которые позволяют интегрировать ваш код в процессы WordPress.
Что такое hooks в WordPress и зачем они нужны
Hooks — это точки подключения в ядре WordPress, с помощью которых можно запускать собственные функции в нужный момент. Они бывают двух видов:
- Actions — выполняют ваши функции, не изменяя данные.
- Filters — изменяют данные перед выводом или сохранением.
Использование hooks — это лучший способ расширять функциональность без изменения кода WordPress, что сохраняет совместимость и упрощает обновления.
Пример использования action и filter
Допустим, нам нужно добавить сообщение внизу каждой статьи и изменить заголовок записи:
function wpwebsite_add_footer_message() {
echo '<p>Спасибо за чтение!</p>';
}
add_action('the_content', 'wpwebsite_add_footer_message');
function wpwebsite_change_post_title($title) {
return 'WPWebsite: ' . $title;
}
add_filter('the_title', 'wpwebsite_change_post_title');Но для полноценного плагина это нужно оформить правильно.
Структура плагина WordPress: создаём с нуля
Для начала создайте в папке wp-content/plugins новую папку, например wpwebsite-custom-plugin. В ней создайте файл wpwebsite-custom-plugin.php. В начале файла укажите шапку плагина:
<?php
/*
Plugin Name: WPWebsite Custom Plugin
Description: Пример плагина с использованием hooks
Version: 1.0
Author: WPWebsite.ru
*/Это минимальный набор для регистрации плагина в админке.
Регистрация actions и filters
Далее добавим код, который подключит наши функции к хукам. Для лучшей читаемости и избежания конфликтов используем префикс wpwebsite_ в именах функций.
function wpwebsite_add_footer_message($content) {
if (is_single()) {
$content .= '<p>Спасибо за чтение на WPWebsite.ru!</p>';
}
return $content;
}
add_filter('the_content', 'wpwebsite_add_footer_message');
function wpwebsite_modify_post_title($title, $id = null) {
if (is_single($id) && in_the_loop()) {
$title = 'WPWebsite: ' . $title;
}
return $title;
}
add_filter('the_title', 'wpwebsite_modify_post_title', 10, 2);Обратите внимание, что для the_title мы передаём два аргумента, поэтому указываем количество параметров в add_filter.
Добавляем настройки плагина в админку с использованием Settings API
Чтобы сделать плагин удобнее, добавим страницу настроек, где можно будет менять текст сообщения. Используем встроенный в WordPress Settings API.
Создание страницы настроек
Добавим хук admin_menu для создания меню:
function wpwebsite_add_admin_menu() {
add_options_page(
'WPWebsite Настройки',
'WPWebsite Опции',
'manage_options',
'wpwebsite-settings',
'wpwebsite_settings_page'
);
}
add_action('admin_menu', 'wpwebsite_add_admin_menu');Теперь создадим функцию отображения страницы:
function wpwebsite_settings_page() {
?>
<div class="wrap">
<h1>Настройки WPWebsite Custom Plugin</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpwebsite_settings_group');
do_settings_sections('wpwebsite-settings');
submit_button();
?>
</form>
</div>
<?php
}Регистрация настроек и полей
Добавим в admin_init регистрацию настроек:
function wpwebsite_settings_init() {
register_setting('wpwebsite_settings_group', 'wpwebsite_footer_text');
add_settings_section(
'wpwebsite_section',
'Основные настройки',
function() { echo '<p>Измените текст внизу записи.</p>'; },
'wpwebsite-settings'
);
add_settings_field(
'wpwebsite_footer_text',
'Текст внизу записи',
'wpwebsite_footer_text_render',
'wpwebsite-settings',
'wpwebsite_section'
);
}
add_action('admin_init', 'wpwebsite_settings_init');
function wpwebsite_footer_text_render() {
$value = get_option('wpwebsite_footer_text', 'Спасибо за чтение на WPWebsite.ru!');
echo '<input type="text" name="wpwebsite_footer_text" value="' . esc_attr($value) . '" style="width: 400px;" />';
}Теперь изменим функцию добавления сообщения, чтобы использовать эту настройку:
function wpwebsite_add_footer_message($content) {
if (is_single()) {
$footer_text = get_option('wpwebsite_footer_text', 'Спасибо за чтение на WPWebsite.ru!');
$content .= '<p>' . esc_html($footer_text) . '</p>';
}
return $content;
}Полезные плагины для разработки и отладки своих плагинов
При создании плагинов удобно использовать инструменты, которые облегчают жизнь:
- Query Monitor — отладка запросов, хуков и ошибок.
- Debug Bar — выводит дебаг-информацию в админке.
- Log Deprecated Notices — помогает выявлять устаревшие функции.
- Plugin Boilerplate Generator — генератор шаблона плагина с хорошей структурой.
Эти плагины полезны как новичкам, так и опытным разработчикам.
Советы по безопасности и производительности
При разработке плагина помните:
- Используйте
esc_html,esc_attrдля вывода данных. - Не забывайте проверять права доступа, например,
current_user_can('manage_options')для админских страниц. - Минимизируйте количество запросов и используйте кэширование, если нужно.
- Пишите код с префиксами, чтобы избежать конфликтов с другими плагинами.
Заключение
Создание собственного плагина с использованием хуков и настроек — отличное решение для кастомизации WordPress под свои задачи. В статье мы рассмотрели базовую структуру плагина, работу с action и filter, добавление страницы настроек и лучшие практики разработки. Используйте этот шаблон как основу для своих проектов и развивайтесь дальше!