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

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

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

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

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

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

Каждый плагин в WordPress — это папка с файлами, в корне которой обязательно должен быть главный PHP-файл с комментариями-заголовками, содержащими информацию о плагине.

Пример минимального файла wplike-sample-plugin.php:

<?php
/**
 * Plugin Name: WP Like Sample Plugin
 * Plugin URI: https://wplike.ru
 * Description: Пример простого плагина для WordPress
 * Version: 1.0
 * Author: WPLike
 * Author URI: https://wplike.ru
 */

// Защита от прямого вызова файла
if (!defined('ABSPATH')) {
    exit;
}

function wplike_sample_plugin_activate() {
    // Код, выполняемый при активации плагина
}
register_activation_hook(__FILE__, 'wplike_sample_plugin_activate');

function wplike_sample_plugin_deactivate() {
    // Код, выполняемый при деактивации плагина
}
register_deactivation_hook(__FILE__, 'wplike_sample_plugin_deactivate');

// Пример простого шорткода
function wplike_sample_shortcode() {
    return '<p>Привет из плагина WPLike!</p>';
}
add_shortcode('wplike_greeting', 'wplike_sample_shortcode');

Объяснение кода:

  • Plugin Name — название плагина, отображаемое в админке.
  • Защита от прямого вызова через проверку ABSPATH.
  • Хуки активации и деактивации для выполнения действий при включении/выключении плагина.
  • Пример шорткода, который можно использовать на страницах сайта.

Добавление настроек плагина: создание страницы в админке WordPress

Полезный плагин обычно имеет свои настройки. Добавим страницу настроек в меню админки. Для этого используем функцию add_options_page.

Пример кода:

function wplike_add_admin_menu() {
    add_options_page(
        'Настройки WPLike',
        'WPLike Settings',
        'manage_options',
        'wplike-settings',
        'wplike_settings_page'
    );
}
add_action('admin_menu', 'wplike_add_admin_menu');

function wplike_settings_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Недостаточно прав доступа');
    }

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

    $value = get_option('wplike_option', '');

    echo '<div class="wrap">';
    echo '<h1>Настройки плагина WPLike</h1>';
    echo '<form method="post" action="">';
    echo '<label for="wplike_option">Пример опции:</label><br>';
    echo '<input type="text" id="wplike_option" name="wplike_option" value="' . esc_attr($value) . '"><br>';
    echo '<input type="submit" value="Сохранить" class="button button-primary">';
    echo '</form></div>';
}

Так мы добавим страницу с текстовым полем и кнопкой сохранения. Значение опции сохраняется в базе через update_option и достаётся через get_option.

Безопасность и стандарты при разработке плагина

Очень важно соблюдать безопасность при работе с пользовательскими данными. В примере выше мы использовали функции sanitize_text_field и esc_attr, чтобы очистить и экранировать данные. Всегда проверяйте права пользователя, который пытается сохранить настройки, с помощью current_user_can.

Также не забывайте добавлять проверку nonce для предотвращения CSRF-атак. Пример добавления nonce в форму:

wp_nonce_field('wplike_save_settings', 'wplike_nonce');

И проверка при сохранении:

if (!isset($_POST['wplike_nonce']) || !wp_verify_nonce($_POST['wplike_nonce'], 'wplike_save_settings')) {
    wp_die('Ошибка безопасности');
}

Пример расширения: добавление виджета с функцией "Нравится" для записей

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

Регистрация виджета и скриптов

function wplike_enqueue_scripts() {
    wp_enqueue_script('wplike-like-script', plugin_dir_url(__FILE__) . 'like.js', ['jquery'], null, true);
    wp_localize_script('wplike-like-script', 'wplike_ajax', [
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wplike_like_nonce')
    ]);
}
add_action('wp_enqueue_scripts', 'wplike_enqueue_scripts');

Обработка AJAX-запроса лайка

function wplike_handle_like() {
    check_ajax_referer('wplike_like_nonce', 'nonce');
    $post_id = intval($_POST['post_id']);
    if (!$post_id) {
        wp_send_json_error('Неверный ID записи');
    }
    $likes = get_post_meta($post_id, '_wplike_likes', true);
    $likes = $likes ? intval($likes) : 0;
    $likes++;
    update_post_meta($post_id, '_wplike_likes', $likes);
    wp_send_json_success(['likes' => $likes]);
}
add_action('wp_ajax_wplike_add_like', 'wplike_handle_like');
add_action('wp_ajax_nopriv_wplike_add_like', 'wplike_handle_like');

HTML и JavaScript для кнопки лайка

В шаблоне темы или через шорткод можно вывести кнопку:

<button class="wplike-button" data-post="<?php the_ID(); ?>">Нравится <span class="wplike-count"><?php echo intval(get_post_meta(get_the_ID(), '_wplike_likes', true)); ?></span></button>

В файле like.js пишем:

jQuery(document).ready(function($) {
    $('.wplike-button').on('click', function() {
        var button = $(this);
        var postId = button.data('post');
        $.post(wplike_ajax.ajax_url, {
            action: 'wplike_add_like',
            post_id: postId,
            nonce: wplike_ajax.nonce
        }, function(response) {
            if (response.success) {
                button.find('.wplike-count').text(response.data.likes);
            } else {
                alert('Ошибка: ' + response.data);
            }
        });
    });
});

Используемые плагины для упрощения разработки

Хотя написание плагина с нуля полезно для понимания, иногда разумно использовать готовые библиотеки и плагины для ускорения работы:

  • WP CLI — инструмент командной строки для создания каркаса плагина.
  • CMB2 — библиотека для создания кастомных полей и форм настроек.
  • ACF (Advanced Custom Fields) — популярный плагин для работы с полями, который можно интегрировать в свой плагин.

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

Тестирование и отладка плагина

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

Итоги

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

Как автоматически удалять неиспользуемые метаполя в WordPress
31.03.2026
Как удалить записи по атрибуту meta в WordPress через cron
22.02.2026
Как работать с transient API в WordPress для эффективного кэширования
03.01.2026
Как настроить автоматический импорт постов в WordPress с помощью REST API
13.03.2026
Как автоматически изменять URL записей WordPress по шаблону
03.04.2026