Создание собственного плагина в WordPress – это отличный способ расширить функциональность сайта под свои конкретные задачи. В этой статье мы подробно рассмотрим структуру плагина, этапы его разработки и приведём примеры полезного кода, чтобы вы могли создать надёжное и понятное расширение для вашего сайта.
Почему стоит создавать собственный плагин для WordPress
Большинство сайтов на WordPress используют готовые плагины, но часто они либо избыточны, либо не совсем подходят под конкретные задачи. Создавая свой плагин, вы получаете полный контроль над функционалом, минимизируете нагрузку на сайт и исключаете потенциальные конфликты с другими расширениями.
Кроме того, собственный плагин – это удобный способ держать кастомные доработки отдельно от темы, что облегчает обновления и поддержку сайта.
Ниже мы рассмотрим, как шаг за шагом создать базовый, но при этом функциональный плагин, который можно дорабатывать под любые задачи.
Структура плагина в WordPress
Минимальный плагин – это один PHP-файл с заголовком, который содержит метаинформацию. Но для более сложных проектов рекомендуется создавать отдельную папку с файлом основного плагина и дополнительными файлами (CSS, JS, шаблоны и т.д.).
Пример минимальной структуры:
wptool-myplugin/– папка плагинаwptool-myplugin/wptool-myplugin.php– основной файл плагина
Внутри wptool-myplugin.php обязательно должен быть заголовок с описанием:
<?php
/*
Plugin Name: WPTool My Plugin
Plugin URI: https://wptool.ru
Description: Пример собственного плагина для WordPress
Version: 1.0
Author: WPTool
Author URI: https://wptool.ru
License: GPL2
*/
Этот заголовок позволяет WordPress распознать и активировать плагин.
Создание простого функционала: добавление пользовательской страницы в админку
Для примера добавим в наш плагин страницу в административную панель WordPress, где можно будет вывести простое приветствие и форму.
Для этого используем хук admin_menu и функцию add_menu_page. Вот код, который нужно добавить после заголовка плагина:
function wptool_add_admin_menu() {
add_menu_page(
'WPTool Настройки', // Заголовок страницы
'WPTool', // Название в меню
'manage_options', // Права доступа
'wptool-settings', // Уникальный slug
'wptool_settings_page', // Функция вывода контента
'dashicons-admin-generic', // Иконка
80 // Позиция меню
);
}
add_action('admin_menu', 'wptool_add_admin_menu');
function wptool_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
echo '<h1>Добро пожаловать в WPTool!</h1>';
echo '<p>Это пример собственной страницы настроек плагина.</p>';
echo '<form method="post" action="options.php">';
settings_fields('wptool_options_group');
do_settings_sections('wptool-settings');
submit_button();
echo '</form>';
}
Этот код создаст новый пункт меню «WPTool» в админке, где выводится заголовок и форма. Пока форма не содержит полей, но мы можем добавить их с помощью API настроек WordPress.
Регистрация настроек и полей формы в плагине
Для того чтобы сохранить данные из формы, используем API настроек:
function wptool_settings_init() {
register_setting('wptool_options_group', 'wptool_options');
add_settings_section(
'wptool_section_main',
'Основные настройки',
'wptool_section_main_cb',
'wptool-settings'
);
add_settings_field(
'wptool_text_field',
'Текстовое поле',
'wptool_text_field_cb',
'wptool-settings',
'wptool_section_main'
);
}
add_action('admin_init', 'wptool_settings_init');
function wptool_section_main_cb() {
echo '<p>Введите необходимые параметры.</p>';
}
function wptool_text_field_cb() {
$options = get_option('wptool_options');
$value = isset($options['text_field']) ? esc_attr($options['text_field']) : '';
echo "<input type='text' name='wptool_options[text_field]' value='$value' class='regular-text' />";
}
Этот код создаёт раздел и поле для ввода текста, которое сохраняется в опциях WordPress. Теперь форма на странице настроек будет содержать поле для ввода и кнопку сохранения.
Пример расширения: добавление shortcode с использованием данных из настроек
Давайте создадим shortcode [wptool_greeting], который будет выводить приветствие с текстом из настроек нашего плагина.
function wptool_greeting_shortcode() {
$options = get_option('wptool_options');
$text = isset($options['text_field']) ? esc_html($options['text_field']) : 'Привет от WPTool!';
return '<div class="wptool-greeting">' . $text . '</div>';
}
add_shortcode('wptool_greeting', 'wptool_greeting_shortcode');
Теперь достаточно вставить [wptool_greeting] в любой пост или страницу, и будет выведено приветствие с вашим текстом из настроек.
Обработка AJAX-запроса в плагине: пример динамического взаимодействия
Иногда нужно сделать интерактивные элементы без перезагрузки страницы. Рассмотрим, как добавить обработку AJAX-запроса в нашем плагине.
Для примера добавим кнопку на страницу настроек, которая при нажатии будет запрашивать текущую дату и время с сервера и выводить их.
Регистрация AJAX-хендлера
function wptool_ajax_get_datetime() {
if (!current_user_can('manage_options')) {
wp_send_json_error('Нет прав доступа');
}
$datetime = current_time('mysql');
wp_send_json_success(array('datetime' => $datetime));
}
add_action('wp_ajax_wptool_get_datetime', 'wptool_ajax_get_datetime');
Добавление кнопки и скрипта на страницу настроек
function wptool_enqueue_admin_scripts($hook) {
if ($hook !== 'toplevel_page_wptool-settings') {
return;
}
wp_enqueue_script('wptool-admin-js', plugin_dir_url(__FILE__) . 'admin.js', array('jquery'), '1.0', true);
wp_localize_script('wptool-admin-js', 'wptool_ajax_object', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wptool_nonce')
));
}
add_action('admin_enqueue_scripts', 'wptool_enqueue_admin_scripts');
В файле admin.js разместим код:
jQuery(document).ready(function($) {
$('#wptool-datetime-button').on('click', function(e) {
e.preventDefault();
$.ajax({
url: wptool_ajax_object.ajax_url,
type: 'POST',
data: {
action: 'wptool_get_datetime',
_ajax_nonce: wptool_ajax_object.nonce
},
success: function(response) {
if(response.success) {
$('#wptool-datetime-result').text('Текущее время: ' + response.data.datetime);
} else {
$('#wptool-datetime-result').text('Ошибка: ' + response.data);
}
}
});
});
});
И добавим кнопку и блок для вывода результата в функцию wptool_settings_page:
echo '<button id="wptool-datetime-button" class="button button-primary">Получить время сервера</button>';
echo '<div id="wptool-datetime-result" style="margin-top:10px;"></div>';
Полезные плагины для разработки и отладки собственных расширений WordPress
При разработке своих плагинов удобно использовать ряд инструментов:
- Query Monitor – помогает отследить ошибки, запросы к базе, хук-исполнения;
- Debug Bar – выводит дополнительную информацию для отладки;
- Log Deprecated Notices – уведомляет о использовании устаревших функций;
- Developer Plugin – содержит набор инструментов для разработчиков.
Используйте их для ускорения разработки и повышения качества кода.
Рекомендации по безопасности и производительности
При создании плагинов обязательно проверяйте права доступа, не доверяйте данным пользователя, используйте функции WordPress для очистки и валидации данных (например, sanitize_text_field, esc_html). Также избегайте выполнения тяжёлых операций в хуках, используйте кэширование и минимизируйте количество подключаемых скриптов и стилей.
В нашем примере мы уже проверяем права с помощью current_user_can('manage_options') и используем esc_html для вывода пользовательских данных.