Создание собственного плагина в WordPress — отличный способ расширить функциональность сайта и сделать уникальные решения, которые не зависят от сторонних разработчиков. В этой статье мы подробно разберём процесс создания простого, но полноценного плагина с учётом всех важных аспектов: структуры, безопасности, подключения файлов и написания кода.
Почему стоит создавать собственный плагин в WordPress
Часто задачи на сайте требуют функционала, которого нет в бесплатных или платных плагинах. Создание собственного плагина позволяет:
- Контролировать и оптимизировать код под свои нужды.
- Обеспечить совместимость с вашей темой и другими плагинами.
- Избавиться от лишних функций, которые замедляют сайт.
- Обеспечить безопасность и обновляемость.
Кроме того, собственный плагин — это отличный способ научиться программировать под WordPress и глубже понять архитектуру CMS.
Структура плагина WordPress: с чего начать
Минимальная структура плагина — это один PHP-файл с заголовком, который WordPress распознает:
<?php
/*
Plugin Name: WP-Kurs Demo Plugin
Plugin URI: https://wp-kurs.ru
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WP-Kurs
Author URI: https://wp-kurs.ru
License: GPL2
*/
// Ваш код здесь
Этот файл нужно положить в отдельную папку в директории wp-content/plugins. Например, wp-kurs-demo-plugin.
Но чаще плагин состоит из нескольких файлов: основного, для функций, для подключения стилей и скриптов, а также директорий для шаблонов, языковых файлов и пр. Вот пример базовой структуры:
wp-kurs-demo-plugin/
├── wp-kurs-demo-plugin.php
├── includes/
│ └── functions.php
├── assets/
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── script.js
└── languages/
└── wp-kurs-demo-plugin-ru_RU.mo
Основные правила безопасности при разработке плагина
Важно всегда помнить о безопасности. Вот базовые рекомендации:
- Запретить прямой вызов PHP-файлов через браузер. Для этого в начале основного файла добавьте:
defined('ABSPATH') or die('No script kiddies please!');- Использовать
nonceдля валидации форм и AJAX-запросов. - Обрабатывать и фильтровать все входящие данные через функции
sanitize_text_field,esc_html,wp_kses_postи пр. - Использовать функции подготовленных запросов при работе с базой данных.
Пример: создание простого плагина с шорткодом
Рассмотрим пример плагина, который добавляет шорткод [wpkurs_hello], выводящий приветствие с текущей датой. В основном файле wp-kurs-demo-plugin.php разместим такой код:
<?php
/*
Plugin Name: WP-Kurs Demo Plugin
Description: Добавляет шорткод для приветствия
Version: 1.0
Author: WP-Kurs
*/
defined('ABSPATH') or die('No script kiddies please!');
// Подключаем функции
require_once plugin_dir_path(__FILE__) . 'includes/functions.php';
В файле includes/functions.php напишем функцию для шорткода:
<?php
function wpkurs_demo_shortcode_hello() {
$date = date_i18n(get_option('date_format'));
return '<p>Привет! Сегодня ' . esc_html($date) . '</p>';
}
add_shortcode('wpkurs_hello', 'wpkurs_demo_shortcode_hello');
Этот код создаст простой шорткод, который можно вставлять в записи или страницы. Дата будет отображаться согласно настройкам WordPress.
Подключение CSS и JavaScript в плагине
Чтобы стилизовать вывод или добавить интерактивность, подключим CSS и JS. Создадим файл assets/css/style.css со стилями:
.wpkurs-hello {
font-weight: bold;
color: #2a7ae2;
}В includes/functions.php добавим функцию подключения:
function wpkurs_demo_enqueue_scripts() {
wp_enqueue_style('wpkurs-demo-style', plugin_dir_url(__FILE__) . '../assets/css/style.css');
}
add_action('wp_enqueue_scripts', 'wpkurs_demo_enqueue_scripts');
И изменим шорткод, добавив класс для стилизации:
function wpkurs_demo_shortcode_hello() {
$date = date_i18n(get_option('date_format'));
return '<p class="wpkurs-hello">Привет! Сегодня ' . esc_html($date) . '</p>';
}
Расширение плагина: создание страницы настроек в админке
Для удобства пользователей можно сделать страницу настроек плагина. Ниже пример добавления меню и страницы с одним полем для приветствия:
function wpkurs_demo_add_admin_menu() {
add_menu_page(
'WP-Kurs Demo Plugin',
'WP-Kurs Plugin',
'manage_options',
'wpkurs-demo-plugin',
'wpkurs_demo_settings_page'
);
}
add_action('admin_menu', 'wpkurs_demo_add_admin_menu');
function wpkurs_demo_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_POST['wpkurs_greeting'])) {
check_admin_referer('wpkurs_demo_save_settings');
update_option('wpkurs_greeting', sanitize_text_field($_POST['wpkurs_greeting']));
echo '<div class="updated">Настройки сохранены</div>';
}
$greeting = get_option('wpkurs_greeting', 'Привет!');
echo '<div class="wrap">';
echo '<h1>Настройки WP-Kurs Demo Plugin</h1>';
echo '<form method="post" action="">';
wp_nonce_field('wpkurs_demo_save_settings');
echo '<label for="wpkurs_greeting">Текст приветствия:</label>';
echo '<input type="text" id="wpkurs_greeting" name="wpkurs_greeting" value="' . esc_attr($greeting) . '" size="50" />';
echo '<p><input type="submit" class="button button-primary" value="Сохранить" /></p>';
echo '</form>';
echo '</div>';
}
Теперь можно менять текст приветствия через админку, а в шорткоде использовать сохранённое значение:
function wpkurs_demo_shortcode_hello() {
$greeting = get_option('wpkurs_greeting', 'Привет!');
$date = date_i18n(get_option('date_format'));
return '<p class="wpkurs-hello">' . esc_html($greeting) . ' Сегодня ' . esc_html($date) . '</p>';
}
Советы по отладке и распространению плагина
Во время разработки включайте WP_DEBUG в wp-config.php, чтобы видеть ошибки и предупреждения. Используйте error_log() для логирования. Перед публикацией проверьте совместимость с разными версиями WordPress и популярными плагинами.
Если планируете распространять плагин, добавьте поддержку локализации, чтобы пользователи могли переводить его на другие языки. Для этого используйте функции __() и _e() и подключите текстовые домены.
Также можно загрузить плагин на официальный репозиторий WordPress или распространять через собственный сайт.
Заключение
Создание собственного плагина в WordPress — не такая сложная задача, если придерживаться базовых правил и стандартов. В этой статье мы рассмотрели полный цикл: от структуры и безопасности до примеров кода и админских настроек. Используйте эти знания для решения конкретных задач вашего сайта и повышения квалификации в разработке под WordPress.