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

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

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

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

Создавая плагин, вы получаете:

  • Контроль над функционалом и кодом;
  • Возможность легко переносить и включать/выключать модуль;
  • Безопасное расширение сайта без правки ядра;
  • Оптимизированный код под свои задачи.

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

Минимальный плагин — это один PHP-файл в папке wp-content/plugins, содержащий специальный заголовок. Однако для удобства и масштабируемости рекомендуется создавать отдельную папку с несколькими файлами.

Пример минимальной структуры:

wp-box-sample-plugin/  # Папка плагина
  wp-box-sample-plugin.php  # Главный файл плагина
  readme.txt  # Описание плагина

Главный PHP-файл должен начинаться с комментария с метаданными, например:

<?php
/*
Plugin Name: WP-Box Sample Plugin
Plugin URI: https://wp-box.ru/
Description: Пример простого плагина для WordPress
Version: 1.0
Author: WP-Box
Author URI: https://wp-box.ru/
License: GPL2
*/

// Код плагина ниже

Создание простого функционала: добавление виджета

Рассмотрим базовый пример — добавим в плагин простой виджет с приветствием. Виджеты — удобный инструмент для вывода информации в сайдбаре или другом виджет-ареа.

Пример кода для файла wp-box-sample-plugin.php:

<?php
class WPBox_Greeting_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wpbox_greeting_widget',
            __('WP-Box Greeting', 'wpbox'),
            ['description' => __('Простой виджет приветствия', 'wpbox')]
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        echo $args['before_title'] . apply_filters('widget_title', 'Приветствие от WP-Box') . $args['after_title'];
        echo '<p>Добро пожаловать на сайт на WordPress!</p>';
        echo $args['after_widget'];
    }

    public function form($instance) {
        // Опционально: форма настроек виджета
    }

    public function update($new_instance, $old_instance) {
        // Обработка сохранения настроек
    }
}

function wpbox_register_greeting_widget() {
    register_widget('WPBox_Greeting_Widget');
}
add_action('widgets_init', 'wpbox_register_greeting_widget');

Данный код регистрирует новый виджет, который выводит заголовок и приветственное сообщение. После активации плагина виджет появится в разделе "Виджеты" в админке.

Добавление настроек плагина через админ-панель

Чтобы сделать плагин удобным для пользователей, добавим страницу с настройками в админку WordPress. Для этого используем хуки admin_menu и функции API настроек.

Пример создания страницы настроек с одним полем:

function wpbox_add_settings_page() {
    add_options_page(
        'Настройки WP-Box',
        'WP-Box',
        'manage_options',
        'wpbox-settings',
        'wpbox_render_settings_page'
    );
}
add_action('admin_menu', 'wpbox_add_settings_page');

function wpbox_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>Настройки WP-Box</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('wpbox_options_group');
            do_settings_sections('wpbox-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

function wpbox_register_settings() {
    register_setting('wpbox_options_group', 'wpbox_welcome_text');

    add_settings_section('wpbox_main_section', 'Основные настройки', null, 'wpbox-settings');

    add_settings_field(
        'wpbox_welcome_text',
        'Текст приветствия',
        'wpbox_welcome_text_callback',
        'wpbox-settings',
        'wpbox_main_section'
    );
}
add_action('admin_init', 'wpbox_register_settings');

function wpbox_welcome_text_callback() {
    $value = get_option('wpbox_welcome_text', 'Добро пожаловать на сайт на WordPress!');
    echo '<input type="text" name="wpbox_welcome_text" value="' . esc_attr($value) . '" class="regular-text" />';
}

Теперь на странице настроек можно менять текст приветствия, который можно вывести в виджете или другом месте.

Безопасность и лучшие практики при разработке плагина

При разработке плагина важно помнить о безопасности и производительности. Вот несколько рекомендаций:

  • Используйте префиксы в названиях функций, классов и переменных, чтобы избежать конфликтов с другими плагинами. В нашем примере это префикс wpbox_.
  • Очистка и проверка данных: всегда обрабатывайте входящие данные с помощью функций sanitize_text_field(), esc_html() и подобных.
  • Используйте nonce и capability проверки для защиты форм и действий в админке.
  • Минимизируйте SQL-запросы и используйте подготовленные выражения при работе с базой.
  • Следите за производительностью, не загружайте лишние скрипты и стили без необходимости.

Расширение плагина: использование AJAX в WP-Box Sample Plugin

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

Добавим в наш плагин следующий код:

function wpbox_enqueue_scripts() {
    wp_enqueue_script('wpbox-ajax-script', plugin_dir_url(__FILE__) . 'js/wpbox-ajax.js', ['jquery'], null, true);
    wp_localize_script('wpbox-ajax-script', 'wpbox_ajax_obj', [
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpbox_ajax_nonce')
    ]);
}
add_action('wp_enqueue_scripts', 'wpbox_enqueue_scripts');

function wpbox_ajax_get_time() {
    check_ajax_referer('wpbox_ajax_nonce', 'nonce');
    wp_send_json_success(['time' => current_time('H:i:s')]);
}
add_action('wp_ajax_wpbox_get_time', 'wpbox_ajax_get_time');
add_action('wp_ajax_nopriv_wpbox_get_time', 'wpbox_ajax_get_time');

Создайте файл js/wpbox-ajax.js с таким содержимым:

jQuery(document).ready(function($) {
    $('#wpbox-time-btn').on('click', function() {
        $.ajax({
            url: wpbox_ajax_obj.ajax_url,
            type: 'POST',
            data: {
                action: 'wpbox_get_time',
                nonce: wpbox_ajax_obj.nonce
            },
            success: function(response) {
                if(response.success) {
                    $('#wpbox-time-display').text('Текущее время: ' + response.data.time);
                } else {
                    $('#wpbox-time-display').text('Ошибка при получении времени');
                }
            }
        });
    });
});

И добавьте в шаблон сайта или виджет кнопку и контейнер для вывода:

<button id="wpbox-time-btn">Показать время</button>
<div id="wpbox-time-display"></div>

Так пользователь по клику получит актуальное время сервера без перезагрузки страницы.

Подведение итогов

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

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

WordPress: как изменить URL авторской страницы
13.11.2025
Как удалить все посты из WordPress одним кликом
24.11.2025
Как создать автоматическое сохранение данных в WordPress с помощью AJAX и плагинов
03.01.2026
Как удалить пустые метаданные из базы WordPress для оптимизации
11.12.2025
Как создать свой плагин в WordPress с нуля
20.11.2025