Создание собственного плагина — это отличный способ расширить функциональность сайта на WordPress и получить полный контроль над его возможностями. В этой статье мы подробно разберём, как сделать плагин с нуля, какие файлы и функции необходимы, и как правильно структурировать код, чтобы плагин работал корректно и безопасно.
Что такое плагин WordPress и зачем его создавать
Плагин — это набор функций, которые расширяют или изменяют стандартные возможности WordPress. Это может быть простой контактная форма, интеграция с внешними сервисами или сложный функционал для управления контентом. Создавая собственный плагин, вы избавляетесь от зависимости от сторонних разработчиков и лучше понимаете, как работает ваш сайт.
Кроме того, собственный плагин помогает поддерживать код в чистоте — не приходится вносить изменения в файлы темы, что упрощает обновления и снижает риск поломок.
Основы создания плагина: структура и обязательные файлы
Каждый плагин в WordPress — это папка с файлами, в корне которой обязательно должен быть главный PHP-файл с комментариями-заголовками, содержащими информацию о плагине.
Пример минимального файла wplike-sample-plugin.php:
<?php
/**
* Plugin Name: WP Like Sample Plugin
* Plugin URI: https://wplike.ru
* Description: Пример простого плагина для WordPress
* Version: 1.0
* Author: WPLike
* Author URI: https://wplike.ru
*/
// Защита от прямого вызова файла
if (!defined('ABSPATH')) {
exit;
}
function wplike_sample_plugin_activate() {
// Код, выполняемый при активации плагина
}
register_activation_hook(__FILE__, 'wplike_sample_plugin_activate');
function wplike_sample_plugin_deactivate() {
// Код, выполняемый при деактивации плагина
}
register_deactivation_hook(__FILE__, 'wplike_sample_plugin_deactivate');
// Пример простого шорткода
function wplike_sample_shortcode() {
return '<p>Привет из плагина WPLike!</p>';
}
add_shortcode('wplike_greeting', 'wplike_sample_shortcode');
Объяснение кода:
Plugin Name— название плагина, отображаемое в админке.- Защита от прямого вызова через проверку
ABSPATH. - Хуки активации и деактивации для выполнения действий при включении/выключении плагина.
- Пример шорткода, который можно использовать на страницах сайта.
Добавление настроек плагина: создание страницы в админке WordPress
Полезный плагин обычно имеет свои настройки. Добавим страницу настроек в меню админки. Для этого используем функцию add_options_page.
Пример кода:
function wplike_add_admin_menu() {
add_options_page(
'Настройки WPLike',
'WPLike Settings',
'manage_options',
'wplike-settings',
'wplike_settings_page'
);
}
add_action('admin_menu', 'wplike_add_admin_menu');
function wplike_settings_page() {
if (!current_user_can('manage_options')) {
wp_die('Недостаточно прав доступа');
}
// Обработка сохранения настроек
if (isset($_POST['wplike_option'])) {
update_option('wplike_option', sanitize_text_field($_POST['wplike_option']));
echo '<div class="updated">Настройки сохранены</div>';
}
$value = get_option('wplike_option', '');
echo '<div class="wrap">';
echo '<h1>Настройки плагина WPLike</h1>';
echo '<form method="post" action="">';
echo '<label for="wplike_option">Пример опции:</label><br>';
echo '<input type="text" id="wplike_option" name="wplike_option" value="' . esc_attr($value) . '"><br>';
echo '<input type="submit" value="Сохранить" class="button button-primary">';
echo '</form></div>';
}
Так мы добавим страницу с текстовым полем и кнопкой сохранения. Значение опции сохраняется в базе через update_option и достаётся через get_option.
Безопасность и стандарты при разработке плагина
Очень важно соблюдать безопасность при работе с пользовательскими данными. В примере выше мы использовали функции sanitize_text_field и esc_attr, чтобы очистить и экранировать данные. Всегда проверяйте права пользователя, который пытается сохранить настройки, с помощью current_user_can.
Также не забывайте добавлять проверку nonce для предотвращения CSRF-атак. Пример добавления nonce в форму:
wp_nonce_field('wplike_save_settings', 'wplike_nonce');
И проверка при сохранении:
if (!isset($_POST['wplike_nonce']) || !wp_verify_nonce($_POST['wplike_nonce'], 'wplike_save_settings')) {
wp_die('Ошибка безопасности');
}
Пример расширения: добавление виджета с функцией "Нравится" для записей
Допустим, вы хотите добавить виджет, который позволит пользователям ставить лайки к записям. Это можно сделать с помощью AJAX и хранения данных в мета-полях.
Регистрация виджета и скриптов
function wplike_enqueue_scripts() {
wp_enqueue_script('wplike-like-script', plugin_dir_url(__FILE__) . 'like.js', ['jquery'], null, true);
wp_localize_script('wplike-like-script', 'wplike_ajax', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wplike_like_nonce')
]);
}
add_action('wp_enqueue_scripts', 'wplike_enqueue_scripts');
Обработка AJAX-запроса лайка
function wplike_handle_like() {
check_ajax_referer('wplike_like_nonce', 'nonce');
$post_id = intval($_POST['post_id']);
if (!$post_id) {
wp_send_json_error('Неверный ID записи');
}
$likes = get_post_meta($post_id, '_wplike_likes', true);
$likes = $likes ? intval($likes) : 0;
$likes++;
update_post_meta($post_id, '_wplike_likes', $likes);
wp_send_json_success(['likes' => $likes]);
}
add_action('wp_ajax_wplike_add_like', 'wplike_handle_like');
add_action('wp_ajax_nopriv_wplike_add_like', 'wplike_handle_like');
HTML и JavaScript для кнопки лайка
В шаблоне темы или через шорткод можно вывести кнопку:
<button class="wplike-button" data-post="<?php the_ID(); ?>">Нравится <span class="wplike-count"><?php echo intval(get_post_meta(get_the_ID(), '_wplike_likes', true)); ?></span></button>
В файле like.js пишем:
jQuery(document).ready(function($) {
$('.wplike-button').on('click', function() {
var button = $(this);
var postId = button.data('post');
$.post(wplike_ajax.ajax_url, {
action: 'wplike_add_like',
post_id: postId,
nonce: wplike_ajax.nonce
}, function(response) {
if (response.success) {
button.find('.wplike-count').text(response.data.likes);
} else {
alert('Ошибка: ' + response.data);
}
});
});
});
Используемые плагины для упрощения разработки
Хотя написание плагина с нуля полезно для понимания, иногда разумно использовать готовые библиотеки и плагины для ускорения работы:
- WP CLI — инструмент командной строки для создания каркаса плагина.
- CMB2 — библиотека для создания кастомных полей и форм настроек.
- ACF (Advanced Custom Fields) — популярный плагин для работы с полями, который можно интегрировать в свой плагин.
Это позволит вам сосредоточиться на логике вашего плагина, а не на базовой инфраструктуре.
Тестирование и отладка плагина
Перед публикацией обязательно тестируйте плагин в разных средах, с разными версиями WordPress и темами. Используйте WP_DEBUG для отлавливания ошибок и предупреждений. Также проверяйте совместимость с популярными плагинами и убедитесь, что плагин не вызывает конфликтов.
Итоги
Создание собственного плагина — это не только полезный навык, но и возможность глубже понять WordPress и сделать сайт уникальным. Следуя изложенному руководству, вы сможете написать плагин, который будет работать стабильно, безопасно и расширять функционал вашего проекта.