WordPress: как создать свой плагин с нуля

Создание собственного плагина для WordPress — одна из самых полезных навыков для разработчика, работающего с этой CMS. Это позволяет расширять функциональность сайта, делать уникальные решения и улучшать производительность. В этой статье мы пошагово разберем, как создать простой, но полностью рабочий плагин с нуля, рассмотрим структуру, основные хуки и добавим примеры кода.

Что такое плагин в WordPress и зачем его создавать

Плагин — это пакет кода, который добавляет определённый функционал в ваш сайт на WordPress без необходимости изменять исходный код движка. Плагины позволяют:

  • Добавлять новые функции (например, формы обратной связи, слайдеры, SEO-инструменты);
  • Интегрироваться с внешними сервисами;
  • Оптимизировать работу сайта;
  • Изменять поведение стандартных элементов;
  • Обеспечивать безопасность и многое другое.

Создание своего плагина полезно, когда вам нужен кастомный функционал, которого нет в готовых решениях, или когда вы хотите оптимизировать уже существующие функции под свои задачи.

Структура плагина WordPress

Минимальный плагин — это один PHP файл с необходимым заголовком. Но для удобства и масштабируемости лучше использовать структуру папок:

  • myplugin/ — корневая папка плагина;
  • myplugin/myplugin.php — главный файл плагина;
  • myplugin/includes/ — вспомогательные файлы с функциями;
  • myplugin/assets/ — скрипты, стили, изображения;
  • myplugin/languages/ — переводы.

Главный файл должен содержать обязательный заголовок, по которому WordPress распознает плагин и может его активировать:

<?php
/**
 * Plugin Name: WPFAQ Simple Plugin
 * Description: Пример простого плагина для сайта wpfaq.ru
 * Version: 1.0
 * Author: WPFAQ Team
 */

// Код плагина здесь

Основные хуки и фильтры для создания плагина

WordPress работает на основе событийной модели, где хуки (actions) и фильтры позволяют вмешиваться в процесс загрузки и вывода данных.

Хуки делятся на два типа:

  • Actions — выполняют код в определённые моменты (например, при активации плагина, загрузке страницы).
  • Filters — изменяют данные перед выводом (например, изменяют контент поста).

Рассмотрим пример использования хука активации плагина:

register_activation_hook(__FILE__, 'wpfaq_plugin_activate');
function wpfaq_plugin_activate() {
    // Действия при активации, например, создание таблиц базы данных
}

Для добавления функционала во фронтенд можно использовать action wp_enqueue_scripts для подключения стилей и скриптов.

Пример подключения CSS и JS

add_action('wp_enqueue_scripts', 'wpfaq_enqueue_assets');
function wpfaq_enqueue_assets() {
    wp_enqueue_style('wpfaq-style', plugin_dir_url(__FILE__) . 'assets/css/style.css');
    wp_enqueue_script('wpfaq-script', plugin_dir_url(__FILE__) . 'assets/js/script.js', array('jquery'), null, true);
}

Создание простой функциональности: шорткод для вывода приветствия

Шорткоды позволяют добавлять динамический контент в записи и страницы, используя короткие метки. Создадим шорткод, который выводит приветствие с именем пользователя.

add_shortcode('wpfaq_greeting', 'wpfaq_shortcode_greeting');
function wpfaq_shortcode_greeting($atts) {
    $atts = shortcode_atts(array(
        'name' => 'гость'
    ), $atts, 'wpfaq_greeting');

    return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на wpfaq.ru.</p>';
}

Использование в записи: [wpfaq_greeting name="Иван"] выведет: Привет, Иван! Добро пожаловать на wpfaq.ru.

Обработка форм в плагине: пример простой формы обратной связи

Добавим в плагин форму обратной связи, которая выводится через шорткод и обрабатывает отправку данных с помощью AJAX.

HTML формы и шорткод

add_shortcode('wpfaq_feedback_form', 'wpfaq_feedback_form_shortcode');
function wpfaq_feedback_form_shortcode() {
    ob_start();
    ?>
    <form id="wpfaq-feedback-form" method="post">
        <label>Ваше имя:</label>
        <input type="text" name="name" required><br>
        <label>Сообщение:</label>
        <textarea name="message" required></textarea><br>
        <input type="submit" value="Отправить">
    </form>
    <div id="wpfaq-feedback-result"></div>
    <?php
    return ob_get_clean();
}

JavaScript для AJAX отправки

Создаем файл assets/js/feedback.js и подключаем его:

jQuery(document).ready(function($) {
    $('#wpfaq-feedback-form').on('submit', function(e) {
        e.preventDefault();
        var data = {
            action: 'wpfaq_send_feedback',
            name: $(this).find('input[name="name"]').val(),
            message: $(this).find('textarea[name="message"]').val(),
        };
        $.post(wpfaq_ajax_object.ajax_url, data, function(response) {
            $('#wpfaq-feedback-result').html(response.data);
        });
    });
});

PHP обработчик AJAX

add_action('wp_ajax_wpfaq_send_feedback', 'wpfaq_send_feedback');
add_action('wp_ajax_nopriv_wpfaq_send_feedback', 'wpfaq_send_feedback');
function wpfaq_send_feedback() {
    $name = sanitize_text_field($_POST['name']);
    $message = sanitize_textarea_field($_POST['message']);
    if (empty($name) || empty($message)) {
        wp_send_json_error('Пожалуйста, заполните все поля.');
    }
    // Здесь можно добавить сохранение в базу или отправку на email
    wp_send_json_success('Спасибо за ваше сообщение, ' . $name . '! Мы свяжемся с вами в ближайшее время.');
}

Подключение скрипта с локализацией

add_action('wp_enqueue_scripts', 'wpfaq_enqueue_assets');
function wpfaq_enqueue_assets() {
    wp_enqueue_script('wpfaq-feedback', plugin_dir_url(__FILE__) . 'assets/js/feedback.js', array('jquery'), null, true);
    wp_localize_script('wpfaq-feedback', 'wpfaq_ajax_object', array('ajax_url' => admin_url('admin-ajax.php')));
}

Рекомендации по безопасности и оптимизации плагина

При разработке плагина важно учитывать:

  • Санитизацию и валидацию данных. Используйте функции sanitize_text_field, sanitize_textarea_field и проверяйте входящие данные, чтобы избежать XSS и SQL-инъекций.
  • Использование Nonce для защиты форм от CSRF-атак. В нашем примере для простоты мы этого не делали, но в реальных проектах обязательно добавляйте nonce.
  • Оптимизацию загрузки ресурсов. Подключайте скрипты и стили только на тех страницах, где они нужны.
  • Чистоту кода. Используйте префиксы с названием сайта или плагина для функций и переменных, чтобы избежать конфликтов.

Итог

Создание плагина с нуля — вполне доступная задача, если понимать базовые принципы работы WordPress, структуру плагинов и механизм хуков. В этой статье мы рассмотрели минимум для старта: структуру, подключение файлов, создание шорткодов и работу с AJAX. На практике вы сможете расширять этот каркас, добавлять собственные функции и создавать мощные расширения для вашего сайта на WordPress.

WooCommerce: автоматическое изменение статуса заказа при оплате Почтой России
19.05.2026
Как автоматически изменять данные пользователя в WordPress при регистрации
09.02.2026
Как отключить регистрацию по бесплатным email в WordPress
21.03.2026
Как создать автоматические резервные копии базы данных WordPress без плагинов
24.12.2025
WooCommerce: как использовать хуки для автоматизации изменений статуса заказа
29.05.2026