Создание собственного плагина для WordPress — это отличный способ добавить функциональность на сайт, не полагаясь на сторонние решения. В этой статье мы разберёмся, как правильно структурировать плагин, зарегистрировать его в системе и написать простой, но полезный функционал на примере. Все примеры будут сопровождаться кодом, чтобы вы могли сразу применить их на практике.
Что такое плагин WordPress и зачем его создавать
Плагин — это пакет PHP-кода, который расширяет базовые возможности WordPress. Он может добавлять новые функции, изменять поведение сайта или интегрироваться с внешними сервисами. Создание собственного плагина полезно, если:
- Вы хотите реализовать уникальный функционал, отсутствующий в существующих решениях.
- Нужно сделать кастомные изменения, которые не зависят от темы.
- Желаете структурировать код, чтобы его было легко поддерживать и переносить между сайтами.
Плагины работают независимо от темы, что делает их гибким инструментом для разработчиков.
Структура плагина WordPress: базовые файлы и папки
Минимальный плагин — это один PHP-файл с правильным заголовком. Однако для удобства развития лучше создавать отдельную папку с файлами. Рассмотрим структуру:
wpengine-myplugin/— корневая папка плагина.wpengine-myplugin/wpengine-myplugin.php— главный файл плагина с объявлением и основным кодом.wpengine-myplugin/includes/— вспомогательные файлы с функциями.wpengine-myplugin/assets/— CSS, JS, изображения.
Пример минимального заголовка в wpengine-myplugin.php:
<?php
/**
* Plugin Name: WP Engine My Plugin
* Description: Пример простого плагина для WordPress.
* Version: 1.0
* Author: WPengine.ru
*/
// Безопасность, чтобы файл не запускался напрямую
if (!defined('ABSPATH')) {
exit;
}
Регистрация базовой функции плагина: добавление шорткода
Шорткоды — простой способ внедрить динамический контент в записи и страницы. Добавим шорткод, который выводит приветствие.
Код для добавления в wpengine-myplugin.php:
function wpengine_myplugin_hello_shortcode() {
return '<p>Привет, это мой первый плагин для WordPress!</p>';
}
add_shortcode('wpengine_hello', 'wpengine_myplugin_hello_shortcode');
Теперь, если в редакторе добавить [wpengine_hello], пользователь увидит приветственное сообщение. Это простой пример, но он демонстрирует базовый принцип расширения WordPress.
Использование хуков и фильтров для расширения функционала
WordPress предоставляет множество хуков (actions) и фильтров (filters) для изменения поведения ядра и других плагинов. Ваш плагин может подписываться на них для реализации логики.
Например, добавим сообщение в админ-панель на главной странице:
function wpengine_myplugin_admin_notice() {
echo '<div class="notice notice-success is-dismissible"><p>Плагин WP Engine My Plugin активен!</p></div>';
}
add_action('admin_notices', 'wpengine_myplugin_admin_notice');
Этот код выведет зелёное уведомление в верхней части админки, подтверждая работу плагина.
Фильтр для изменения заголовка сайта
Для демонстрации фильтра изменим заголовок сайта динамически:
function wpengine_myplugin_filter_bloginfo_title($title) {
return $title . ' | дополнено плагином WP Engine';
}
add_filter('bloginfo', 'wpengine_myplugin_filter_bloginfo_title', 10, 1);
Функция дописывает текст к названию сайта, что можно использовать для SEO или брендинга.
Добавление настроек плагина в админ-панель
Для удобства пользователей полезно добавить страницу настроек. Рассмотрим создание простого меню и формы с опцией.
Добавим меню:
function wpengine_myplugin_admin_menu() {
add_menu_page(
'Настройки WP Engine My Plugin',
'WP Engine Plugin',
'manage_options',
'wpengine-myplugin-settings',
'wpengine_myplugin_settings_page'
);
}
add_action('admin_menu', 'wpengine_myplugin_admin_menu');
Создадим callback для страницы настроек:
function wpengine_myplugin_settings_page() {
// Проверяем права
if (!current_user_can('manage_options')) {
return;
}
// Обработка сохранения
if (isset($_POST['wpengine_myplugin_text'])) {
update_option('wpengine_myplugin_text', sanitize_text_field($_POST['wpengine_myplugin_text']));
echo '<div class="updated">Настройки сохранены.</div>';
}
$value = get_option('wpengine_myplugin_text', '');
?>
<div class="wrap">
<h1>Настройки WP Engine My Plugin</h1>
<form method="post" action="">
<label for="wpengine_myplugin_text">Введите текст:</label><br>
<input type="text" id="wpengine_myplugin_text" name="wpengine_myplugin_text" value="<?php echo esc_attr($value); ?>" size="50" /><br><br>
<input type="submit" class="button button-primary" value="Сохранить" />
</form>
</div>
<?php
}
Так пользователь сможет менять текст, который плагин будет использовать, например, в шорткоде.
Использование сохранённой опции в шорткоде
Изменим наш шорткод, чтобы он выводил сохранённое значение:
function wpengine_myplugin_hello_shortcode() {
$text = get_option('wpengine_myplugin_text', 'Привет, это мой первый плагин для WordPress!');
return '<p>' . esc_html($text) . '</p>';
}
add_shortcode('wpengine_hello', 'wpengine_myplugin_hello_shortcode');
Подключение CSS и JavaScript в плагине
Для улучшения интерфейса часто нужны стили и скрипты. Правильный способ — использовать хуки wp_enqueue_scripts для публичной части и admin_enqueue_scripts для админки.
Пример подключения стилей и скриптов в публичной части:
function wpengine_myplugin_enqueue_scripts() {
wp_enqueue_style('wpengine-myplugin-style', plugin_dir_url(__FILE__) . 'assets/style.css');
wp_enqueue_script('wpengine-myplugin-script', plugin_dir_url(__FILE__) . 'assets/script.js', array('jquery'), false, true);
}
add_action('wp_enqueue_scripts', 'wpengine_myplugin_enqueue_scripts');
Для админки аналогично:
function wpengine_myplugin_admin_scripts() {
wp_enqueue_style('wpengine-myplugin-admin-style', plugin_dir_url(__FILE__) . 'assets/admin-style.css');
}
add_action('admin_enqueue_scripts', 'wpengine_myplugin_admin_scripts');
Это гарантирует, что ресурсы будут подключены только там, где нужны, без лишней нагрузки.
Отладка и локализация плагина
Для удобства отладки используйте функции error_log() и WP_DEBUG. Для перевода нужно подключить текстовые домены и использовать функции __() и _e().
Пример локализации строки:
__('Привет, это мой первый плагин для WordPress!', 'wpengine-myplugin');
Добавьте в плагин загрузку текстового домена:
function wpengine_myplugin_load_textdomain() {
load_plugin_textdomain('wpengine-myplugin', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
add_action('plugins_loaded', 'wpengine_myplugin_load_textdomain');
Это позволит легко переводить плагин на другие языки.
Полезные плагины для разработки и тестирования собственных плагинов
Для улучшения процесса разработки рекомендуем использовать следующие плагины:
- Query Monitor — детальный дебаг запросов, ошибок и хуков.
- Debug Bar — панель отладки в админке.
- Developer — набор инструментов для разработчиков.
- Plugin Boilerplate Generator — автоматическая генерация базовой структуры плагина.
Эти инструменты помогут ускорить создание и выявление ошибок в вашем коде.
Выводы по созданию плагина для WordPress
Разработка плагина начинается с понимания структуры и базовых функций WordPress, затем следует регистрация шорткодов, хуков и фильтров, создание страницы настроек и подключение ресурсов. Весь код должен быть безопасным, оптимизированным и локализованным. Приведённые примеры дадут вам рабочую базу, которую можно расширять для реализации сложных задач.