Создание собственного плагина для WordPress — отличный способ расширить функциональность сайта и решить уникальные задачи. В этой статье мы подробно разберём, как создать простой, но полноценный плагин с нуля. Вы узнаете, как правильно структурировать код, подключать хуки и создавать административную панель. Всё это с примерами и рекомендациями, которые помогут избежать типичных ошибок.
Почему стоит создавать собственный плагин WordPress
Часто готовые плагины не полностью удовлетворяют потребности сайта или содержат лишний функционал, замедляющий работу. Создание собственного плагина позволяет:
- Решить конкретную задачу без избыточного кода.
- Оптимизировать производительность за счёт минимального объёма кода.
- Гарантировать безопасность за счёт контроля над каждой строкой.
- Учиться и лучше понимать внутренние механизмы WordPress.
Кроме того, написание плагина — это полезный навык для любого разработчика на WordPress.
Структура и базовый файл плагина WordPress
Плагин — это папка с файлами в директории wp-content/plugins. Минимально необходимый файл — главный PHP-файл с заголовком плагина. Создадим папку wpmy-simple-plugin и файл wpmy-simple-plugin.php.
В начале файла добавим стандартный заголовок:
<?php
/*
Plugin Name: WPMy Simple Plugin
Plugin URI: https://wpmy.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WPMy
Author URI: https://wpmy.ru
License: GPL2
*/
Этот блок необходим, чтобы WordPress распознал плагин и вывел информацию в админке.
Подключение функций через хуки
Чтобы плагин выполнял действия, нужно использовать хуки. Допустим, мы хотим добавить в контент сообщения простое уведомление. Для этого воспользуемся фильтром the_content.
function wpmy_add_notification_to_content($content) {
if(is_singular('post')) {
$notification = '<div style="padding:10px; background:#f0f8ff; border:1px solid #a0c4ff; margin-bottom:20px;">Это кастомное уведомление от плагина WPMy.</div>';
return $notification . $content;
}
return $content;
}
add_filter('the_content', 'wpmy_add_notification_to_content');
Этот код добавляет блок с уведомлением перед содержимым каждой записи (post). Таким образом, вы видите, как легко изменять вывод с помощью плагина.
Создание административной страницы плагина
Для управления плагином полезно иметь собственную страницу настроек в админке WordPress. Добавим её с помощью функции add_menu_page.
function wpmy_simple_plugin_menu() {
add_menu_page(
'WPMy Simple Plugin', // Заголовок страницы
'WPMy Settings', // Название меню
'manage_options', // Возможность доступа
'wpmy-simple-plugin', // Уникальный слаг
'wpmy_simple_plugin_settings_page', // Функция вывода
'dashicons-admin-generic', // Иконка
80
);
}
add_action('admin_menu', 'wpmy_simple_plugin_menu');
function wpmy_simple_plugin_settings_page() {
if(!current_user_can('manage_options')) {
return;
}
if(isset($_POST['wpmy_plugin_option'])) {
update_option('wpmy_plugin_option', sanitize_text_field($_POST['wpmy_plugin_option']));
echo '<div class="updated notice"><p>Настройки сохранены.</p></div>';
}
$value = get_option('wpmy_plugin_option', '');
echo '<div class="wrap">';
echo '<h1>Настройки WPMy Simple Plugin</h1>';
echo '<form method="post" action="">';
echo '<label for="wpmy_plugin_option">Введите значение:</label><br>';
echo '<input type="text" id="wpmy_plugin_option" name="wpmy_plugin_option" value="' . esc_attr($value) . '" style="width:300px;"><br><br>';
echo '<input type="submit" value="Сохранить" class="button button-primary">';
echo '</form></div>';
}
Этот код создаёт меню в админке с простыми настройками, которые сохраняются в базе данных через опции.
Безопасность и стандарты кодирования WordPress
При создании плагинов важно соблюдать стандарты WordPress:
- Используйте префиксы для всех функций и переменных, чтобы избежать конфликтов (например,
wpmy_). - Обязательно проверяйте права пользователя перед сохранением настроек (как в примере с
current_user_can). - Обрабатывайте и фильтруйте данные, поступающие от пользователя — используйте функции
sanitize_text_field,esc_attrи другие. - Используйте переводы, если планируете локализацию — для простоты можно позже добавить
__()и_e().
Соблюдение этих правил гарантирует стабильную и безопасную работу плагина.
Пример добавления безопасности nonce для формы
Добавим nonce-поле для защиты от CSRF-атак:
function wpmy_simple_plugin_settings_page() {
if(!current_user_can('manage_options')) {
return;
}
if(isset($_POST['wpmy_plugin_option'])) {
if(!isset($_POST['wpmy_plugin_nonce']) || !wp_verify_nonce($_POST['wpmy_plugin_nonce'], 'wpmy_save_settings')) {
echo '<div class="error notice"><p>Ошибка безопасности. Попробуйте снова.</p></div>';
return;
}
update_option('wpmy_plugin_option', sanitize_text_field($_POST['wpmy_plugin_option']));
echo '<div class="updated notice"><p>Настройки сохранены.</p></div>';
}
$value = get_option('wpmy_plugin_option', '');
echo '<div class="wrap">';
echo '<h1>Настройки WPMy Simple Plugin</h1>';
echo '<form method="post" action="">';
wp_nonce_field('wpmy_save_settings', 'wpmy_plugin_nonce');
echo '<label for="wpmy_plugin_option">Введите значение:</label><br>';
echo '<input type="text" id="wpmy_plugin_option" name="wpmy_plugin_option" value="' . esc_attr($value) . '" style="width:300px;"><br><br>';
echo '<input type="submit" value="Сохранить" class="button button-primary">';
echo '</form></div>';
}
Расширение плагина: добавление шорткода
Часто полезно добавлять шорткоды для вывода функционала в любом месте сайта. Добавим простой шорткод, который выведет сохранённое в настройках значение.
function wpmy_simple_plugin_shortcode() {
$value = get_option('wpmy_plugin_option', 'Значение не задано');
return '<div style="padding:10px; background:#e0ffe0; border:1px solid #00cc00;">Настройка плагина: ' . esc_html($value) . '</div>';
}
add_shortcode('wpmy_setting', 'wpmy_simple_plugin_shortcode');
Теперь вы можете использовать шорткод [wpmy_setting] в любом посте или странице, чтобы вывести текущее значение опции плагина.
Резюме и дальнейшие шаги
В этой статье мы создали простой плагин с базовой структурой, добавили фильтр для контента, административную страницу с безопасным сохранением данных и шорткод для вывода настроек. Это прочный фундамент для разработки более сложных расширений.
Дальше можно изучить:
- Работу с кастомными типами записей и метаполями.
- Добавление собственных стилей и скриптов через
wp_enqueue_scripts. - Использование AJAX в плагинах WordPress.
- Локализацию и интернационализацию плагинов.
Создавайте свои плагины осознанно и с удовольствием, чтобы сделать WordPress ещё удобнее и мощнее!