Как создать собственный плагин для WordPress с примерами кода

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

Почему стоит создавать собственный плагин

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

Кроме того, плагин легче тестировать, масштабировать и делиться с другими. Вы можете сделать его более универсальным, добавлять настройки в админке, создавать собственные шорткоды, виджеты и REST API.

Структура простого плагина для WordPress

Начнем с базовой структуры. В директории wp-content/plugins создайте папку wptemplates-custom-plugin. Внутри создайте файл wptemplates-custom-plugin.php. В этот файл добавим обязательный заголовок плагина — метаинформацию, которую WordPress распознает.

<?php
/**
 * Plugin Name: WPTEMPLATES Custom Plugin
 * Description: Пример простого собственного плагина для WordPress
 * Version: 1.0
 * Author: WPTEMPLATES
 */

// Безопасность: запрет прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

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

Добавляем функционал: простой шорткод

Давайте добавим шорткод, который выводит текущую дату и время с небольшим текстом. Внутри файла добавляем функцию с префиксом wptemplates_, чтобы избежать конфликтов:

function wptemplates_show_datetime() {
    return 'Текущая дата и время: ' . date('d.m.Y H:i:s');
}
add_shortcode('wptemplates_datetime', 'wptemplates_show_datetime');

Теперь, если вставить в редактор WordPress шорткод [wptemplates_datetime], на странице будет выводиться дата и время сервера.

Добавляем страницу настроек плагина в админку

Очень полезно уметь создавать настройки, чтобы пользователь мог менять поведение плагина без редактирования кода.

Для начала добавим меню в админке:

function wptemplates_custom_plugin_menu() {
    add_options_page(
        'Настройки WPTEMPLATES',
        'WPTEMPLATES Настройки',
        'manage_options',
        'wptemplates-custom-plugin',
        'wptemplates_custom_plugin_settings_page'
    );
}
add_action('admin_menu', 'wptemplates_custom_plugin_menu');

Теперь создадим функцию, которая будет выводить форму настроек:

function wptemplates_custom_plugin_settings_page() {
    // Проверка прав
    if (!current_user_can('manage_options')) {
        return;
    }

    // Обработка сохранения настроек
    if (isset($_POST['wptemplates_custom_plugin_text'])) {
        check_admin_referer('wptemplates_custom_plugin_save_settings');
        update_option('wptemplates_custom_plugin_text', sanitize_text_field($_POST['wptemplates_custom_plugin_text']));
        echo '<div class="updated">Настройки сохранены.</div>';
    }

    $value = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
    ?>
    <div class="wrap">
        <h1>Настройки WPTEMPLATES Custom Plugin</h1>
        <form method="post" action="">
            <?php wp_nonce_field('wptemplates_custom_plugin_save_settings'); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">Текст для шорткода</th>
                    <td><input type="text" name="wptemplates_custom_plugin_text" value="<?php echo esc_attr($value); ?>" size="50" /></td>
                </tr>
            </table>
            <input type="submit" class="button-primary" value="Сохранить" />
        </form>
    </div>
    <?php
}

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

Использование настроек в шорткоде

Обновим функцию шорткода, чтобы она выводила текст из настроек:

function wptemplates_show_datetime() {
    $text = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
    return $text . ' - текущая дата и время: ' . date('d.m.Y H:i:s');
}

Таким образом, администратор может менять текст без правки кода.

Безопасность и рекомендации

При работе с пользовательскими данными обязательно используйте функции очистки данных, такие как sanitize_text_field(), esc_html(), wp_nonce_field() и проверяйте права пользователя.

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

Расширение плагина: добавление виджета

Для примера добавим простой виджет, который выводит тот же текст и дату. Создадим класс, наследующий WP_Widget:

class WPTEMPLATES_Custom_Widget extends WP_Widget {
    public function __construct() {
        parent::__construct(
            'wptemplates_custom_widget',
            __('WPTEMPLATES Виджет', 'wptemplates'),
            ['description' => __('Простой виджет с текстом и датой', 'wptemplates')]
        );
    }

    public function widget($args, $instance) {
        echo $args['before_widget'];
        $text = get_option('wptemplates_custom_plugin_text', 'Привет, WPTEMPLATES!');
        echo '<p>' . esc_html($text) . ' - ' . date('d.m.Y H:i:s') . '</p>';
        echo $args['after_widget'];
    }
}

function wptemplates_register_custom_widget() {
    register_widget('WPTEMPLATES_Custom_Widget');
}
add_action('widgets_init', 'wptemplates_register_custom_widget');

Добавьте этот код в файл плагина, и после активации в разделе «Виджеты» появится новый виджет.

Заключение

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

Используйте полученные знания, чтобы сделать сайт на WordPress более удобным и функциональным!

Как оптимизировать производительность WordPress с помощью плагинов и кода
18.11.2025
Как удалить или изменить URL страницы регистрации WordPress без плагинов
10.02.2026
WooCommerce: как добавить поле подтверждения пароля в форму регистрации
09.06.2026
WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
30.06.2026
Как использовать фильтр pre_get_posts в WordPress для кастомизации запросов
06.12.2025