Создание плагина для WordPress — это не просто «написать файл с кодом», а спроектировать расширение, которое корректно встраивается в архитектуру CMS (хуки, API, структура файлов).
1. База: как устроен плагин
Плагин — это PHP-модуль, который:
- подключается к ядру WordPress
- использует hooks (actions и filters)
- расширяет или изменяет поведение сайта
Минимально — это один PHP-файл, но в реальности почти всегда используется структура проекта.
2. Минимальный плагин (стартовая точка)
Создай файл:
/wp-content/plugins/my-first-plugin/my-first-plugin.php
Внутри:
<?php
/*
Plugin Name: My First Plugin
Description: Пример простого плагина
Version: 1.0
Author: Your Name
*/
if (!defined('ABSPATH')) {
exit; // защита от прямого доступа
}
После этого:
- зайди в админку WordPress
- активируй плагин
👉 Уже на этом этапе WordPress распознаёт его.
3. Хуки — ядро всей логики
3.1 Actions (действия)
Позволяют «вставить» код в определённый момент.
Пример:
add_action('wp_footer', 'my_plugin_footer_text');
function my_plugin_footer_text() {
echo '<p style="text-align:center;">Добавлено плагином</p>';
}
➡ Это добавит текст в футер сайта.
3.2 Filters (фильтры)
Позволяют изменить данные.
add_filter('the_content', 'my_plugin_modify_content');
function my_plugin_modify_content($content) {
return $content . '<p>Дополнение от плагина</p>';
}
➡ Меняет содержимое поста.
4. Правильная структура плагина
Для серьёзной разработки:
my-plugin/
│
├── my-plugin.php
├── includes/
│ ├── functions.php
│ ├── admin.php
│
├── assets/
│ ├── css/
│ ├── js/
│
└── templates/
Главный файл подключает модули:
require_once plugin_dir_path(__FILE__) . 'includes/functions.php';
5. Добавление настроек в админку
5.1 Регистрируем меню
add_action('admin_menu', 'my_plugin_menu');
function my_plugin_menu() {
add_menu_page(
'Настройки плагина',
'Мой плагин',
'manage_options',
'my-plugin',
'my_plugin_settings_page'
);
}
5.2 Страница настроек
function my_plugin_settings_page() {
echo '<h1>Настройки плагина</h1>';
}
6. Работа с базой данных
WordPress даёт API:
6.1 Сохранение данных
update_option('my_plugin_option', 'value');
6.2 Получение
$value = get_option('my_plugin_option');
👉 Это предпочтительнее прямых SQL-запросов.
7. Подключение CSS и JS
Важно использовать правильные хуки:
add_action('wp_enqueue_scripts', 'my_plugin_assets');
function my_plugin_assets() {
wp_enqueue_style('my-style', plugin_dir_url(__FILE__) . 'assets/css/style.css');
wp_enqueue_script('my-script', plugin_dir_url(__FILE__) . 'assets/js/script.js', [], false, true);
}
8. Активация и деактивация плагина
register_activation_hook(__FILE__, 'my_plugin_activate');
register_deactivation_hook(__FILE__, 'my_plugin_deactivate');
function my_plugin_activate() {
// например, создать опции
}
function my_plugin_deactivate() {
// очистка
}
9. Безопасность (критически важно)
Минимальные требования:
Проверка доступа
if (!current_user_can('manage_options')) {
return;
}
Nonce (защита форм)
wp_nonce_field('my_action', 'my_nonce');
Проверка:
if (!wp_verify_nonce($_POST['my_nonce'], 'my_action')) {
return;
}
10. Шорткоды (часто используются)
add_shortcode('my_shortcode', 'my_shortcode_func');
function my_shortcode_func() {
return '<p>Это шорткод</p>';
}
Использование:
[my_shortcode]
11. AJAX внутри плагина
add_action('wp_ajax_my_action', 'my_ajax_handler');
function my_ajax_handler() {
echo 'Ответ сервера';
wp_die();
}
12. Объектно-ориентированный подход (рекомендуется)
class MyPlugin {
public function __construct() {
add_action('wp_footer', [$this, 'footer']);
}
public function footer() {
echo 'ООП плагин';
}
}
new MyPlugin();
👉 Это масштабируемый подход.
13. Типичные ошибки новичков
- ❌ Пишут код прямо в теме вместо плагина
- ❌ Не используют хуки
- ❌ Игнорируют безопасность
- ❌ Загружают скрипты неправильно
- ❌ Не разделяют код на модули
14. Как развиваться дальше
После базового уровня стоит изучить:
- REST API WordPress
- Custom Post Types
- Gutenberg блоки
- Composer + автозагрузка
- MVC-подход в плагинах
Создание плагина — это комбинация:
- понимания жизненного цикла WordPress
- работы с хуками
- грамотной архитектуры