Создание собственного плагина — важный навык для разработчика WordPress, который позволяет расширять функциональность сайта без изменения исходного кода темы и ядра. В этой статье мы подробно разберем, как правильно создать плагин с нуля, какие файлы необходимы, как подключать функции и обеспечивать безопасность, а также приведем пример рабочего кода.
Основы создания плагина WordPress: структура и требования
Плагин WordPress — это по сути набор PHP-файлов и других ресурсов, которые расширяют возможности сайта. Чтобы WordPress распознал ваш плагин, достаточно создать папку в директории wp-content/plugins и в ней файл с заголовком плагина.
Минимальная структура плагина выглядит так:
wp-content/plugins/my-plugin/my-plugin.php
В файле my-plugin.php должен быть специальный заголовок, который сообщает WordPress, что это плагин:
<?php
/*
Plugin Name: WPSolution Sample Plugin
Plugin URI: https://wpsolution.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WPSolution
Author URI: https://wpsolution.ru
License: GPL2
*/
// Код плагина здесь
Этот блок обязателен. После его добавления WordPress увидит плагин в админке и позволит его активировать.
Регистрация функции и хук активации плагина
Для удобства и чтобы избежать конфликтов, все функции желательно именовать с префиксом, например wpsolution_. Начнем с простой функции, которая выводит сообщение в административной панели.
function wpsolution_admin_notice() {
echo '<div class="notice notice-success is-dismissible"><p>Плагин WPSolution активирован!</p></div>';
}
add_action('admin_notices', 'wpsolution_admin_notice');
Этот код добавит уведомление в верхнюю часть любой админ-страницы.
Также для плагина полезно реализовать функцию, которая выполняется при его активации:
function wpsolution_activate_plugin() {
// Здесь можно добавить код для создания таблиц, настроек и т.д.
}
register_activation_hook(__FILE__, 'wpsolution_activate_plugin');
Это может быть полезно, например, для создания собственной таблицы в базе данных или установки опций.
Добавление настроек плагина в админ-панель
Чтобы плагин был более функциональным, стоит добавить страницу настроек. Для этого используем API WordPress.
Сначала добавим пункт меню в админку:
function wpsolution_add_admin_menu() {
add_options_page('Настройки WPSolution', 'WPSolution', 'manage_options', 'wpsolution', 'wpsolution_options_page');
}
add_action('admin_menu', 'wpsolution_add_admin_menu');
Далее создадим функцию, которая выведет форму настроек:
function wpsolution_options_page() {
?>
<div class="wrap">
<h1>Настройки плагина WPSolution</h1>
<form action="options.php" method="post">
<?php
settings_fields('wpsolution_options_group');
do_settings_sections('wpsolution');
submit_button();
?>
</form>
</div>
<?php
}
Для регистрации настроек используем следующий код:
function wpsolution_settings_init() {
register_setting('wpsolution_options_group', 'wpsolution_option_name');
add_settings_section(
'wpsolution_section',
'Основные настройки',
'wpsolution_section_callback',
'wpsolution'
);
add_settings_field(
'wpsolution_option_field',
'Опция плагина',
'wpsolution_option_field_render',
'wpsolution',
'wpsolution_section'
);
}
add_action('admin_init', 'wpsolution_settings_init');
function wpsolution_section_callback() {
echo 'Настройте параметры плагина ниже.';
}
function wpsolution_option_field_render() {
$value = get_option('wpsolution_option_name');
echo '<input type="text" name="wpsolution_option_name" value="' . esc_attr($value) . '" />';
}
Таким образом, мы создадим страницу настроек с одним текстовым полем.
Пример расширения: добавление шорткода
Шорткоды позволяют пользователям вставлять функционал плагина прямо в записи и страницы. Добавим простой шорткод, который выводит текст из опции:
function wpsolution_shortcode_display() {
$text = get_option('wpsolution_option_name', 'Текст по умолчанию');
return '<div class="wpsolution-message">' . esc_html($text) . '</div>';
}
add_shortcode('wpsolution_message', 'wpsolution_shortcode_display');
Теперь пользователь может вставить в контент [wpsolution_message] и увидеть сообщение.
Рекомендации по безопасности и производительности
При разработке плагинов важно соблюдать базовые правила безопасности. Никогда не забывайте:
- Использовать функции экранирования (например,
esc_html,esc_attr) перед выводом данных. - Валидировать и санитизировать входящие данные.
- Использовать неповторяющиеся префиксы для функций, классов и опций, чтобы избежать конфликтов.
- Минимизировать количество запросов к базе, использовать кэширование, если необходимо.
Также стоит тестировать плагин на разных версиях WordPress и с другими популярными плагинами для совместимости.
Полный пример простого плагина WPSolution
Объединим все вместе — минимальный рабочий плагин с настройкой, шорткодом и уведомлением:
<?php
/*
Plugin Name: WPSolution Sample Plugin
Plugin URI: https://wpsolution.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WPSolution
Author URI: https://wpsolution.ru
License: GPL2
*/
function wpsolution_admin_notice() {
echo '<div class="notice notice-success is-dismissible"><p>Плагин WPSolution активирован!</p></div>';
}
add_action('admin_notices', 'wpsolution_admin_notice');
function wpsolution_activate_plugin() {
// Код при активации
}
register_activation_hook(__FILE__, 'wpsolution_activate_plugin');
function wpsolution_add_admin_menu() {
add_options_page('Настройки WPSolution', 'WPSolution', 'manage_options', 'wpsolution', 'wpsolution_options_page');
}
add_action('admin_menu', 'wpsolution_add_admin_menu');
function wpsolution_options_page() {
?>
<div class="wrap">
<h1>Настройки плагина WPSolution</h1>
<form action="options.php" method="post">
<?php
settings_fields('wpsolution_options_group');
do_settings_sections('wpsolution');
submit_button();
?>
</form>
</div>
<?php
}
function wpsolution_settings_init() {
register_setting('wpsolution_options_group', 'wpsolution_option_name');
add_settings_section('wpsolution_section', 'Основные настройки', 'wpsolution_section_callback', 'wpsolution');
add_settings_field('wpsolution_option_field', 'Опция плагина', 'wpsolution_option_field_render', 'wpsolution', 'wpsolution_section');
}
add_action('admin_init', 'wpsolution_settings_init');
function wpsolution_section_callback() {
echo 'Настройте параметры плагина ниже.';
}
function wpsolution_option_field_render() {
$value = get_option('wpsolution_option_name');
echo '<input type="text" name="wpsolution_option_name" value="' . esc_attr($value) . '" />';
}
function wpsolution_shortcode_display() {
$text = get_option('wpsolution_option_name', 'Текст по умолчанию');
return '<div class="wpsolution-message">' . esc_html($text) . '</div>';
}
add_shortcode('wpsolution_message', 'wpsolution_shortcode_display');