Создание собственного плагина для WordPress — это отличный способ добавить функциональность на сайт именно так, как вам нужно. Особенно важно, чтобы плагин был адаптивным и имел удобный интерфейс настройки в админке. В этой статье мы подробно разберём, как написать простой адаптивный плагин с настройками, используя стандартные API WordPress, а также обеспечим безопасность и удобство использования.
Почему важно создавать адаптивные плагины с настройками
Плагины, которые позволяют пользователям настраивать свои параметры через удобный интерфейс, значительно повышают удобство эксплуатации сайта. Это особенно актуально, если вы планируете распространять плагин или использовать его на нескольких проектах. Без настроек пользователю придется лезть в код, что неудобно и небезопасно.
Также адаптивность плагина проявляется в корректной работе на разных устройствах и экранах, в том числе в админке WordPress. Поэтому важно продумывать интерфейс так, чтобы он был удобен на мобильных и настольных устройствах.
Регистрация и подключение плагина
Начнем с создания базового файла плагина, который подключит все необходимые функции. Создайте в папке wp-content/plugins новую папку wpdir-adaptive-plugin и добавьте туда файл wpdir-adaptive-plugin.php со следующим содержимым:
<?php
/**
* Plugin Name: WPDir Adaptive Plugin
* Description: Адаптивный плагин с настройками
* Version: 1.0
* Author: WPDir
*/
// Защита от прямого вызова
if (!defined('ABSPATH')) {
exit;
}
// Подключение функции добавления страницы настроек
add_action('admin_menu', 'wpdir_add_settings_page');
function wpdir_add_settings_page() {
add_options_page(
'Настройки WPDir Adaptive',
'WPDir Adaptive',
'manage_options',
'wpdir-adaptive-settings',
'wpdir_render_settings_page'
);
}
Этот код создаст в меню Настройки новую страницу для нашего плагина.
Создание страницы настроек плагина
Теперь реализуем функцию wpdir_render_settings_page, которая будет отображать форму с настройками. Для примера добавим несколько параметров: текстовое поле, переключатель и выбор цвета.
function wpdir_render_settings_page() {
// Проверяем, что пользователь имеет права
if (!current_user_can('manage_options')) {
return;
}
// Сохраняем настройки при отправке формы
if (isset($_POST['wpdir_settings_nonce']) && wp_verify_nonce($_POST['wpdir_settings_nonce'], 'wpdir_save_settings')) {
update_option('wpdir_text_option', sanitize_text_field($_POST['wpdir_text_option']));
update_option('wpdir_checkbox_option', isset($_POST['wpdir_checkbox_option']) ? '1' : '0');
update_option('wpdir_color_option', sanitize_hex_color($_POST['wpdir_color_option']));
echo '<div class="updated">Настройки сохранены.</div>';
}
// Получаем текущие значения
$text = get_option('wpdir_text_option', '');
$checkbox = get_option('wpdir_checkbox_option', '0');
$color = get_option('wpdir_color_option', '#000000');
// Выводим форму
echo '<div class="wrap">';
echo '<h1>Настройки WPDir Adaptive Plugin</h1>';
echo '<form method="post" action="">';
wp_nonce_field('wpdir_save_settings', 'wpdir_settings_nonce');
echo '<table class="form-table">';
echo '<tr><th scope="row">Текстовое поле</th><td>';
echo '<input type="text" name="wpdir_text_option" value="' . esc_attr($text) . '" class="regular-text" />';
echo '</td></tr>';
echo '<tr><th scope="row">Включить функцию</th><td>';
echo '<input type="checkbox" name="wpdir_checkbox_option" value="1" ' . checked('1', $checkbox, false) . ' />';
echo '</td></tr>';
echo '<tr><th scope="row">Выбор цвета</th><td>';
echo '<input type="text" name="wpdir_color_option" value="' . esc_attr($color) . '" class="wp-color-picker-field" data-default-color="#000000" />';
echo '</td></tr>';
echo '</table>';
submit_button('Сохранить настройки');
echo '</form>';
echo '</div>';
}
Обратите внимание, что мы используем wp_nonce_field для защиты от CSRF и функции очистки данных перед сохранением.
Подключение скриптов и стилей для цветовой палитры
Для корректной работы поля выбора цвета подключим стандартный скрипт WordPress. Добавим следующий код:
add_action('admin_enqueue_scripts', 'wpdir_enqueue_color_picker');
function wpdir_enqueue_color_picker($hook_suffix) {
if ($hook_suffix !== 'settings_page_wpdir-adaptive-settings') {
return;
}
wp_enqueue_style('wp-color-picker');
wp_enqueue_script('wp-color-picker');
wp_add_inline_script('wp-color-picker', 'jQuery(document).ready(function($){$(".wp-color-picker-field").wpColorPicker();});');
}
Это обеспечит удобный интерфейс выбора цвета на странице настроек.
Добавление функционала плагина с учётом настроек
Допустим, наш плагин должен выводить в конце каждой записи сообщение, текст и цвет которого задаёт пользователь, а также учитывать, включено ли отображение.
add_filter('the_content', 'wpdir_filter_content');
function wpdir_filter_content($content) {
if (!is_singular('post')) {
return $content;
}
$enabled = get_option('wpdir_checkbox_option', '0');
if ($enabled !== '1') {
return $content;
}
$text = get_option('wpdir_text_option', '');
$color = get_option('wpdir_color_option', '#000000');
if (empty($text)) {
return $content;
}
$message = '<p style="color:' . esc_attr($color) . '; font-weight: bold;">' . esc_html($text) . '</p>';
return $content . $message;
}
Таким образом, если пользователь включил опцию и указал текст, в конце каждой записи он увидит цветное сообщение.
Советы по безопасности и оптимизации
При разработке плагина важно соблюдать несколько правил:
- Используйте
nonceдля защиты форм от CSRF. - Обрабатывайте и фильтруйте все входные данные:
sanitize_text_field,sanitize_hex_colorи т.п. - Проверяйте права пользователя перед выводом и сохранением настроек.
- Минимизируйте подключение скриптов только на нужных страницах.
- Соблюдайте стандарты кодирования WordPress для поддержки и совместимости.
Расширение функционала и идеи для дальнейшей работы
Вы можете развивать этот базовый плагин, добавляя:
- Дополнительные типы настроек, например, выпадающие списки, радиокнопки, загрузку изображений.
- Возможность сброса настроек к стандартным.
- Интеграцию с другими плагинами и API.
- Поддержку мультиязычности (i18n).
- Обработка AJAX-запросов для динамических настроек без перезагрузки.
Такой подход позволит создавать действительно удобные и адаптивные плагины, которые легко поддерживать и расширять.