Как написать плагин для wordpress

Как написать плагин для wordpress

WordPress предоставляет мощный API для разработки плагинов, позволяющий расширять функциональность сайта без изменения ядра. Чтобы создать базовый плагин, достаточно одного PHP-файла, размещённого в каталоге /wp-content/plugins/. В этом файле должна присутствовать специальная шапка с метаданными, включая Plugin Name, Description, Version, Author.

Минимальный рабочий пример плагина выглядит так:


<?php
/*
Plugin Name: Custom Example Plugin
Description: Простой плагин для демонстрации структуры
Version: 1.0
Author: Your Name
*/

После активации плагин будет отображаться в админ-панели, даже если он пока не выполняет действий. Чтобы добавить функциональность, необходимо использовать хуки WordPress: add_action и add_filter. Например, с помощью add_action(‘init’, ‘my_plugin_init’) можно выполнить код при инициализации системы.

При работе с плагинами важно соблюдать нейминг, избегая конфликтов с другими модулями. Используйте префиксы для функций, например: myplugin_register_post_type(). Это предотвратит ошибки при активации и повысит совместимость с другими компонентами.

Хорошей практикой является размещение функционала в отдельных классах и использование автозагрузки через spl_autoload_register или Composer. Это упрощает масштабирование и поддержку кода. Также рекомендуется изолировать административную и пользовательскую части через условные конструкции is_admin() и !is_admin().

Структура файлов и папок для плагина WordPress

Минимальная структура плагина включает один основной PHP-файл с заголовком плагина. Однако для масштабируемости и удобства разработки рекомендуется использовать следующую организацию:

  • /my-plugin/ – корневая папка плагина. Название должно быть уникальным, без пробелов, в нижнем регистре.
  • my-plugin.php – основной файл плагина. Содержит шапку с метаданными и точку входа.
  • /includes/ – вспомогательные PHP-файлы: функции, классы, хуки.
  • /admin/ – логика панели администратора: настройки, страницы, стили и скрипты для бэкенда.
  • /assets/ – изображения, иконки, шрифты, неисполняемые ресурсы.
  • /languages/ – .pot, .po и .mo файлы для локализации.
  • uninstall.php – скрипт удаления плагина, вызывается при его удалении через интерфейс WordPress.
  • readme.txt – документация для каталога WordPress.org (если планируется публикация).

Файл my-plugin.php подключает остальные модули с помощью require_once или spl_autoload_register. Логику разделяй по ответственности: инициализация – в основном файле, реализация – в подкаталогах. Не смешивай код администратора и фронтенда в одном месте.

Каждому скрипту и стилю присваивай уникальный handle, используемый в wp_enqueue_script() и wp_enqueue_style(). Для безопасности обрабатывай входные данные через sanitize_* и проверяй nonce при отправке форм.

Регистрация плагина в системе и добавление описания

Регистрация плагина в системе и добавление описания

Чтобы WordPress распознал плагин, необходимо создать главный PHP-файл и поместить его в папку с уникальным названием в директории /wp-content/plugins/. Имя файла должно совпадать с логикой названия плагина, например: my-custom-plugin.php.

В начале файла размещается блок с метаданными. Он строго обязателен для регистрации плагина:

Plugin Name – название, отображаемое в панели администратора. Plugin URI ведёт на страницу плагина, где можно разместить документацию или обновления. Description появляется в списке установленных плагинов, кратко объясняя назначение. Поля Version и Author информируют о текущей версии и создателе.

Text Domain обязателен для интернационализации. Он должен совпадать с названием директории плагина и использоваться в функциях __() и _e() для перевода строк.

После сохранения файла и размещения его в нужной директории, плагин автоматически появится в списке доступных в административной панели WordPress. Чтобы активировать его, достаточно нажать «Активировать» в интерфейсе.

Подключение скриптов и стилей через enqueue

Подключение скриптов и стилей через enqueue

Для правильного подключения ресурсов в WordPress используется функция wp_enqueue_script() и wp_enqueue_style(), которые регистрируются через хук wp_enqueue_scripts для фронтенда и admin_enqueue_scripts для административной панели.

Подключение JavaScript и CSS в плагине должно происходить внутри функции, которая предварительно проверяет контекст. Пример подключения скриптов только на определённой странице административной панели:

add_action('admin_enqueue_scripts', 'myplugin_admin_assets');
function myplugin_admin_assets($hook) {
if ($hook !== 'toplevel_page_myplugin') return;
wp_enqueue_style('myplugin-admin-style', plugin_dir_url(__FILE__) . 'assets/css/admin.css', [], '1.0');
wp_enqueue_script('myplugin-admin-script', plugin_dir_url(__FILE__) . 'assets/js/admin.js', ['jquery'], '1.0', true);
}

Для фронтенда используется аналогичный подход, но с хелпером is_page() или проверкой условий:

add_action('wp_enqueue_scripts', 'myplugin_front_assets');
function myplugin_front_assets() {
if (!is_page('контакт')) return;
wp_enqueue_style('myplugin-style', plugin_dir_url(__FILE__) . 'assets/css/style.css', [], '1.0');
wp_enqueue_script('myplugin-script', plugin_dir_url(__FILE__) . 'assets/js/script.js', ['jquery'], '1.0', true);
}

Для обеспечения безопасности и интеграции с AJAX или REST рекомендуется использовать wp_localize_script() для передачи данных из PHP в JavaScript:

wp_localize_script('myplugin-script', 'myPluginData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce'   => wp_create_nonce('myplugin_nonce')
]);

Имена скриптов и стилей должны быть уникальны в пределах проекта, чтобы избежать конфликтов. Версии файлов лучше указывать явно, а параметр $in_footer устанавливать в true, чтобы минимизировать влияние на производительность загрузки страницы.

Создание настроек плагина в админке WordPress

Создание настроек плагина в админке WordPress

Для добавления пользовательских настроек в админку WordPress используется API Settings. Начните с регистрации страницы настроек через функцию add_options_page() в хук admin_menu. Пример:

add_action('admin_menu', 'my_plugin_add_admin_menu');
function my_plugin_add_admin_menu() {
add_options_page(
'Настройки плагина',
'Мой плагин',
'manage_options',
'my_plugin_settings',
'my_plugin_settings_page'
);
}
function my_plugin_settings_page() {
echo '<form action="options.php" method="post">';
settings_fields('my_plugin_options_group');
do_settings_sections('my_plugin_settings');
submit_button();
echo '</form>';
}

Далее зарегистрируйте настройки и поля с помощью register_setting(), add_settings_section() и add_settings_field() внутри хука admin_init:

add_action('admin_init', 'my_plugin_settings_init');
function my_plugin_settings_init() {
register_setting('my_plugin_options_group', 'my_plugin_option');
add_settings_section(
'my_plugin_section',
'Основные настройки',
null,
'my_plugin_settings'
);
add_settings_field(
'my_plugin_option_field',
'Название опции',
'my_plugin_option_field_render',
'my_plugin_settings',
'my_plugin_section'
);
}
function my_plugin_option_field_render() {
$value = get_option('my_plugin_option', '');
echo '<input type="text" name="my_plugin_option" value="' . esc_attr($value) . '" />';
}

Для сохранения значений не требуется писать обработчики – WordPress сам обрабатывает форму через options.php, если все функции вызваны корректно. Используйте sanitize_callback при регистрации параметров для валидации данных.

Использование хуков и фильтров для расширения функционала

Использование хуков и фильтров для расширения функционала

WordPress предоставляет два ключевых механизма расширения – действия (actions) и фильтры (filters). Они позволяют внедрять собственный код в определённые точки выполнения без модификации ядра.

Действия выполняются в определённый момент, но не возвращают значение. Пример подключения функции при инициализации:

add_action('init', 'my_plugin_custom_init');
function my_plugin_custom_init() {
// Регистрация типа записи, запуск крона и т.д.
}

Фильтры применяются для модификации данных. Например, изменение заголовка поста:

add_filter('the_title', 'my_plugin_modify_title');
function my_plugin_modify_title($title) {
return '[Модифицировано] ' . $title;
}

Пользовательские хуки также можно создавать. Это даёт другим разработчикам возможность взаимодействовать с вашим плагином:

do_action('my_plugin_after_save', $post_id);

Затем другой разработчик может подписаться на этот хук:

add_action('my_plugin_after_save', 'log_post_save');
function log_post_save($post_id) {
// Запись в лог или уведомление
}

Рекомендуется добавлять префикс плагина к названиям хуков, чтобы избежать конфликтов. Для повышения гибкости логики используйте apply_filters вместо жёстко заданных значений:

$limit = apply_filters('my_plugin_query_limit', 10);

Таким образом, хуки и фильтры – это архитектурная основа, обеспечивающая расширяемость, модульность и совместимость с другими компонентами WordPress.

Безопасная работа с формами и пользовательским вводом

Безопасная работа с формами и пользовательским вводом

Обработка данных из форм требует обязательной валидации и очистки для предотвращения XSS и SQL-инъекций. Используйте функции WordPress для фильтрации ввода: sanitize_text_field() для текстовых данных, sanitize_email() для email, intval() или floatval() для числовых значений.

Для проверки nonce применяйте check_admin_referer() или wp_verify_nonce(). Это предотвращает CSRF-атаки, подтверждая легитимность запроса.

При сохранении данных в базу избегайте прямого SQL-запроса. Используйте подготовленные выражения через $wpdb->prepare(). Это обеспечивает экранирование и защищает от SQL-инъекций.

Всегда проверяйте тип и формат данных, особенно если форма принимает файлы. Ограничивайте расширения и размер, используйте встроенные функции WordPress для загрузки файлов – wp_handle_upload() с правильной настройкой параметров.

Не храните чувствительную информацию без шифрования. Для аутентификации и передачи данных используйте HTTPS и стандартные механизмы безопасности WordPress.

Вопрос-ответ:

Какие основные шаги нужно пройти для создания простого плагина для WordPress с нуля?

Создание плагина начинается с разработки основной структуры: создается папка с именем плагина в каталоге wp-content/plugins, в ней размещается главный PHP-файл с описанием плагина в комментариях (заголовок). Затем следует написать функционал — например, добавление новых функций или хуков. После этого плагин можно активировать через административную панель WordPress. Важно проверить, чтобы код не содержал ошибок и не вызывал конфликтов с другими компонентами сайта.

Как добавить в плагин интерфейс настроек в админке WordPress?

Для создания интерфейса настроек нужно использовать функции WordPress для добавления страниц меню, такие как add_menu_page() или add_submenu_page(). Внутри этих страниц размещается форма с полями, значения которых сохраняются в базу данных с помощью функций update_option() и get_option(). Рекомендуется использовать nonce-поля для защиты от CSRF-атак и sanitize функции для обработки данных перед сохранением.

Можно ли использовать сторонние библиотеки в своем плагине, и как правильно их подключать?

Да, можно. Обычно сторонние библиотеки помещают в отдельную папку внутри плагина, например, /vendor или /libs. Для подключения используют require_once или autoload через Composer, если плагин достаточно сложный. Следует убедиться, что библиотека совместима с версией PHP и WordPress, а также избегать конфликтов с другими плагинами, которые могут использовать аналогичные библиотеки.

Как обеспечить безопасность при разработке плагина для WordPress?

Безопасность достигается несколькими способами: необходимо фильтровать и проверять все входящие данные с помощью функций sanitize_text_field(), esc_html(), и подобных. Используйте nonce-токены для подтверждения действий пользователей в админке. Не допускайте прямого доступа к файлам плагина, добавляя проверку константы ABSPATH. Также избегайте выполнения SQL-запросов без подготовки, применяйте $wpdb->prepare(). Это помогает предотвратить уязвимости типа XSS, CSRF и SQL-инъекции.

Ссылка на основную публикацию