Создание собственного плагина — один из ключевых навыков для разработчика WordPress. Это позволяет добавлять уникальный функционал, который не зависит от темы и не затрагивает ядро системы. В этой статье мы подробно разберем, как создать плагин с нуля, подключить его к сайту, добавить настройки и обработчики, а также рассмотрим, как избежать типичных ошибок.
Почему стоит создавать собственный плагин
Часто разработчики любят добавлять кастомный функционал прямо в файл functions.php темы, но это — плохая практика. При смене темы все настройки и функции пропадут. Плагин же работает независимо и сохраняет ваши наработки при обновлениях темы и ядра.
Кроме того, плагин легче тестировать, масштабировать и делиться с другими. Вы можете сделать его более универсальным, добавлять настройки в админке, создавать собственные шорткоды, виджеты и REST API.
Структура простого плагина для WordPress
Начнем с базовой структуры. В директории wp-content/plugins создайте папку wptemplates-custom-plugin. Внутри создайте файл wptemplates-custom-plugin.php. В этот файл добавим обязательный заголовок плагина — метаинформацию, которую WordPress распознает.
<?php
/**
* Plugin Name: WPTEMPLATES Custom Plugin
* Description: Пример простого собственного плагина для WordPress
* Version: 1.0
* Author: WPTEMPLATES
*/
// Безопасность: запрет прямого доступа
if (!defined('ABSPATH')) {
exit;
}Этот код необходим, чтобы WordPress увидел плагин и не позволял запускать файл напрямую.
Добавляем функционал: простой шорткод
Давайте добавим шорткод, который выводит текущую дату и время с небольшим текстом. Внутри файла добавляем функцию с префиксом wptemplates_, чтобы избежать конфликтов:
function wptemplates_show_datetime() {
return 'Текущая дата и время: ' . date('d.m.Y H:i:s');
}
add_shortcode('wptemplates_datetime', 'wptemplates_show_datetime');Теперь, если вставить в редактор WordPress шорткод [wptemplates_datetime], на странице будет выводиться дата и время сервера.
Добавляем страницу настроек плагина в админку
Очень полезно уметь создавать настройки, чтобы пользователь мог менять поведение плагина без редактирования кода.
Для начала добавим меню в админке:
function wptemplates_custom_plugin_menu() {
add_options_page(
'Настройки WPTEMPLATES',
'WPTEMPLATES Настройки',
'manage_options',
'wptemplates-custom-plugin',
'wptemplates_custom_plugin_settings_page'
);
}
add_action('admin_menu', 'wptemplates_custom_plugin_menu');Теперь создадим функцию, которая будет выводить форму настроек:
function wptemplates_custom_plugin_settings_page() {
// Проверка прав
if (!current_user_can('manage_options')) {
return;
}
// Обработка сохранения настроек
if (isset($_POST['wptemplates_custom_plugin_text'])) {
check_admin_referer('wptemplates_custom_plugin_save_settings');
update_option('wptemplates_custom_plugin_text', sanitize_text_field($_POST['wptemplates_custom_plugin_text']));
echo '<div class="updated">Настройки сохранены.</div>';
}
$value = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
?>
<div class="wrap">
<h1>Настройки WPTEMPLATES Custom Plugin</h1>
<form method="post" action="">
<?php wp_nonce_field('wptemplates_custom_plugin_save_settings'); ?>
<table class="form-table">
<tr valign="top">
<th scope="row">Текст для шорткода</th>
<td><input type="text" name="wptemplates_custom_plugin_text" value="<?php echo esc_attr($value); ?>" size="50" /></td>
</tr>
</table>
<input type="submit" class="button-primary" value="Сохранить" />
</form>
</div>
<?php
}Этот код создаст страницу настроек с одним полем, куда можно ввести текст, который будет выводиться шорткодом.
Использование настроек в шорткоде
Обновим функцию шорткода, чтобы она выводила текст из настроек:
function wptemplates_show_datetime() {
$text = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
return $text . ' - текущая дата и время: ' . date('d.m.Y H:i:s');
}Таким образом, администратор может менять текст без правки кода.
Безопасность и рекомендации
При работе с пользовательскими данными обязательно используйте функции очистки данных, такие как sanitize_text_field(), esc_html(), wp_nonce_field() и проверяйте права пользователя.
Также не забывайте использовать префиксы для ваших функций и опций, чтобы избежать конфликтов с другими плагинами.
Расширение плагина: добавление виджета
Для примера добавим простой виджет, который выводит тот же текст и дату. Создадим класс, наследующий WP_Widget:
class WPTEMPLATES_Custom_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'wptemplates_custom_widget',
__('WPTEMPLATES Виджет', 'wptemplates'),
['description' => __('Простой виджет с текстом и датой', 'wptemplates')]
);
}
public function widget($args, $instance) {
echo $args['before_widget'];
$text = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
echo '<p>' . esc_html($text) . ' - ' . date('d.m.Y H:i:s') . '</p>';
echo $args['after_widget'];
}
}
function wptemplates_register_custom_widget() {
register_widget('WPTEMPLATES_Custom_Widget');
}
add_action('widgets_init', 'wptemplates_register_custom_widget');Добавьте этот код в файл плагина, и после активации в разделе «Виджеты» появится новый виджет.
Заключение
Создание собственного плагина — отличный способ научиться глубже понимать WordPress и писать расширяемый, безопасный код. В этой статье вы получили базовый шаблон, научились создавать шорткод, страницу настроек и виджет. Далее вы можете усложнять функционал, добавлять обработку AJAX, создавать собственные типы записей и таксономии.
Используйте полученные знания, чтобы сделать сайт на WordPress более удобным и функциональным!