Создание собственного плагина для WordPress — важный навык для любого разработчика, который хочет расширить функциональность сайта без зависимости от сторонних решений. В этой статье мы подробно разберём, как правильно начать разработку плагина, какие файлы нужны, как правильно подключать хуки и фильтры, а также приведём конкретные примеры кода.
Основы создания плагина WordPress: структура и файлы
Любой плагин WordPress — это, в первую очередь, папка с файлами внутри каталога wp-content/plugins. Минимальный плагин состоит из одного PHP-файла с заголовком, который идентифицирует плагин в системе.
Структура минимального плагина выглядит так:
wpfind-simple-plugin/
wpfind-simple-plugin.php
В файле wpfind-simple-plugin.php обязательно должен быть заголовок плагина:
<?php
/**
* Plugin Name: WPFind Simple Plugin
* Description: Пример минимального плагина для WordPress
* Version: 1.0
* Author: WPFind.ru
*/
// Код плагина здесь
Этот заголовок позволяет WordPress определить название, описание и автора плагина.
Подключение хуков и фильтров: расширяем функциональность
Хуки — это основа взаимодействия плагинов с ядром WordPress. Существуют два типа: действия (actions) и фильтры (filters). Действия позволяют выполнить код в определённый момент, а фильтры — изменить данные перед выводом или сохранением.
Например, добавим действие, которое выводит сообщение внизу каждой записи:
function wpfind_add_footer_message() {
echo '<p style="text-align:center; color:#999;">Спасибо, что читаете WPFind!</p>';
}
add_action('the_content', 'wpfind_add_footer_message');
Однако, использовать the_content как действие не совсем корректно, потому что это фильтр. Лучше использовать фильтр для изменения контента:
function wpfind_modify_post_content($content) {
if(is_single()) {
$content .= '<p style="text-align:center; color:#999;">Спасибо, что читаете WPFind!</p>';
}
return $content;
}
add_filter('the_content', 'wpfind_modify_post_content');
Так мы добавим сообщение только к одиночным записям.
Структурирование плагина: подключение дополнительных файлов
По мере роста плагина, один файл становится неудобным. Хорошей практикой считается разбивать функционал по файлам и подключать их через require_once или include_once.
Например, создадим папку includes и файл functions.php для вспомогательных функций:
wpfind-simple-plugin/
includes/
functions.php
wpfind-simple-plugin.php
В главном файле подключим этот файл:
require_once plugin_dir_path(__FILE__) . 'includes/functions.php';
В functions.php можно разместить любые вспомогательные функции, чтобы код был чистым и поддерживаемым.
Безопасность и стандарты: важные моменты при разработке
При создании плагина важно учитывать безопасность. Никогда не доверяйте входящим данным без проверки. Используйте функции WordPress для валидации и экранирования, например:
sanitize_text_field()— для очистки текстовых данныхesc_html()— для безопасного вывода в HTMLwp_nonce_field()иcheck_admin_referer()— для защиты форм
Также всегда проверяйте, что код выполняется в контексте WordPress, чтобы избежать прямого доступа к файлам:
defined('ABSPATH') or die('No script kiddies please!');
Пример простого плагина с настройками в админке
Создадим простой плагин, который добавляет на сайт произвольное сообщение, задаваемое в настройках админки.
1. Создаем меню настроек
function wpfind_simple_plugin_add_admin_menu() {
add_options_page(
'WPFind Simple Plugin',
'WPFind Plugin',
'manage_options',
'wpfind-simple-plugin',
'wpfind_simple_plugin_options_page'
);
}
add_action('admin_menu', 'wpfind_simple_plugin_add_admin_menu');
2. Регистрируем настройки
function wpfind_simple_plugin_settings_init() {
register_setting('wpfindSimplePlugin', 'wpfind_simple_plugin_options');
add_settings_section(
'wpfind_simple_plugin_section',
__('Основные настройки', 'wpfind'),
null,
'wpfindSimplePlugin'
);
add_settings_field(
'wpfind_simple_plugin_text',
__('Сообщение', 'wpfind'),
'wpfind_simple_plugin_text_render',
'wpfindSimplePlugin',
'wpfind_simple_plugin_section'
);
}
add_action('admin_init', 'wpfind_simple_plugin_settings_init');
function wpfind_simple_plugin_text_render() {
$options = get_option('wpfind_simple_plugin_options');
?>
<input type='text' name='wpfind_simple_plugin_options[wpfind_simple_plugin_text]' value='<?php echo esc_attr($options['wpfind_simple_plugin_text'] ?? ''); ?>' />
<?php
}
3. Страница настроек
function wpfind_simple_plugin_options_page() {
?>
<form action='options.php' method='post'>
<h2>WPFind Simple Plugin</h2>
<?php
settings_fields('wpfindSimplePlugin');
do_settings_sections('wpfindSimplePlugin');
submit_button();
?>
</form>
<?php
}
4. Вывод сообщения на сайте
function wpfind_simple_plugin_display_message($content) {
if (is_single()) {
$options = get_option('wpfind_simple_plugin_options');
$message = $options['wpfind_simple_plugin_text'] ?? '';
if (!empty($message)) {
$content .= '<p style="color: #0073aa; font-weight: bold;">' . esc_html($message) . '</p>';
}
}
return $content;
}
add_filter('the_content', 'wpfind_simple_plugin_display_message');
Полезные плагины и ресурсы для разработки
Для разработки и отладки плагинов рекомендуем следующие инструменты:
- Debug Bar — выводит отладочную информацию в админ-панели WordPress.
- Query Monitor — показывает запросы к базе данных, ошибки PHP и многое другое.
- WP-CLI — консольный инструмент для управления WordPress, включая создание шаблонов плагинов.
- PHP CodeSniffer с стандартом WordPress — помогает соблюдать кодстайл WordPress.
Заключение
Создание собственного плагина WordPress — это не только способ добавить уникальный функционал, но и отличная практика для повышения квалификации. Главное — придерживаться стандартов, писать безопасный код и структурировать проект. Используйте приведённый пример как отправную точку, а дальше развивайте плагин под свои задачи.