wp-kurs.ru wordpress WP-Kurs

Как создать свой плагин в WordPress: практическое руководство

Создание собственного плагина в 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.

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙