Повний курс із розробки плагінів для WordPress: створіть свій перший функціональний плагін від нуля до готового продукту.

Читання за 3 хвилини.
2026-03-15
2026-06-03
2,626
Я заробляю комісію, коли ви робите покупки за посиланнями нижче, без додаткових витрат для вас.

Перш ніж розпочати, переконайтеся, що у вас є локальне або онлайн-середовище WordPress для розробки та тестування. Інтегровані середовища на кшталт Local, XAMPP чи MAMP є чудовим вибором. Крім того, вам знадобиться комп’ютер, на якому встановлений програмний інструмент для редагування коду (наприклад, Visual Studio Code чиPhpStorm), а також базові знання мов програмування PHP, HTML, CSS та JavaScript.

Наявність чітко встановленого середовища розробки є основою для всіх наступних робіт, адже воно дозволяє зосередитися на логіці коду, а не на налаштуваннях самого середовища.

Створіть свій перший файл плагіна.

Будь-який плагін для WordPress має мінімум один основний PHP-файл, який обов’язково містить певну заголовкову коментарну рядок (plugin header comment). Ця рядок надає системі WordPress необхідну метаінформацію про плагін.

Рекомендуємо до прочитання. Повний посібник з розробки плагінів для WordPress: створення професійних плагінів з нуля

Примітки до заголовків плагінів та основного файлу

По-перше, у каталозі встановлення WordPress… wp-content/plugins/ У цьому папці створіть новий папірець, наприклад… my-first-pluginУ цьому папці створіть головний файл. my-first-plugin.phpНа початку файлу обов’язково має бути додано стандартну коментарну частину, що містить інформацію про плагін.

UltaHost – хостинг для сайтів, побудованих на платформі WordPress
Гарантія повернення грошей протягом 30 днів, необмежена пропускна здатність мережі та доступ до баз даних, безкоштовний захист від DDoS-атак; знижка 50% при покупці на термін 3 роки (варіанти об’ємів трафіку: 4 ТБ/5
<?php
/**
 * Plugin Name:       我的第一个功能插件
 * Plugin URI:        https://yourwebsite.com/my-first-plugin
 * Description:       这是一个学习 WordPress 插件开发的示例插件,用于在前端页面底部添加自定义文本。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Цей коментар є своєрідним “ідентифікаційним документом” плагіна. WordPress отримує інформацію про плагін, читаючи цей коментар. Plugin Name Ім’я плагіна відображатиметься на сторінці адміністративного інтерфейсу, а інша інформація (номер версії, опис тощо) – у відповідних розділах. Після збереження файлу ви зможете побачити цей невикористовуваний плагін на сторінці “Плагіни” в адміністраторі WordPress.

Функціональне реалізування: додавання дій-хаків (action hooks).

Логіка плагінів переважно взаємодіє з системою хуків (Hooks) WordPress. Ми будемо її використовувати для реалізації необхідних функцій. wp_footer Цей функціонал-хак (action hook) виводить певний текст у футері сторінки веб-сайту.

Під коментарями у вихідному коді плагіна додайте наступний код:

// 在网站页脚添加自定义文本
function mfp_add_footer_text() {
    echo '<p style="text-align: center; color: #666;">Дякуємо, що прочитали! Цей футер був створений за допомогою плагіна “Моя перша функціональна додаткова програма” („My First Functional Plugin“).</p>';
}
add_action( 'wp_footer', 'mfp_add_footer_text' );

Тут ми створили об’єкт під назвою… mfp_add_footer_text Використовуйте власну функцію, створену вами, а потім застосовуйте її за потреби. add_action() Функція “монтує” цю функцію на певну структуру чи об’єкт системи. wp_footer Це розташовано на цьому гачку. Коли WordPress доходить до розділу футера, наша функція автоматично виконується, і виводиться відповідний фрагмент HTML-коду.

Рекомендуємо до прочитання. Створюйте свій перший плагін для WordPress крок за кроком: від початку до практичної розробки.

Додайте сторінку для налаштування керування плагіном.

Функціональний плагін зазвичай потребує інтерфейсу для налаштувань на серверній стороні, щоб користувачі могли змінювати поведінку плагіна без необхідності модифікації коду. Ми створимо просту сторінку з параметрами для налаштувань.

Створити елемент меню керування

По-перше, нам потрібно використати… add_action( ‘admin_menu’, … ) Додайте новий елемент меню у менеджері назад. У вашому основному файлі плагіна продовжіть додавати наступний код:

// 添加管理菜单
function mfp_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 权限要求
        'mfp-settings',         // 菜单slug
        'mfp_settings_page',    // 显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(使用Dashicons)
        30                      // 菜单位置
    );
}
add_action( 'admin_menu', 'mfp_add_admin_menu' );

add_menu_page() Функція є частиною API, наданого ядром WordPress, і використовується для додавання головного меню до лівого бічного меню. Ми вказали відповідні права користувача. manage_optionsЗазвичай до цього ресурсу мають доступ лише адміністратори.

hosting.com Віртуальний хостинг
Висока продуктивність завдяки процесорам AMD EPYC, SSD-накопичувачам NVMe і технології LiteSpeed, цілодобова експертна підтримка, розширені заходи безпеки, включаючи SSL, грубу силу, захист від шкідливих програм і DDoS, економія до 73%.

Створення сторінки налаштувань та форми

Далі нам потрібно визначити вищезгадані функції-повернення (callback functions). mfp_settings_page Необхідно отримати HTML-вміст сторінки з налаштуваннями та обробити процес збереження даних з форми.

// 设置页面的HTML内容
function mfp_settings_page() {
    // 检查用户权限
    if ( !current_user_can( ‘manage_options’ ) ) {
        return;
    }

// 处理表单提交
    if ( isset( $_POST[‘mfp_footer_text’] ) ) {
        // 验证和清理输入数据
        $new_text = sanitize_text_field( $_POST[‘mfp_footer_text’] );
        // 使用 update_option 将数据保存到数据库
        update_option( ‘mfp_footer_text’, $new_text );
        echo ‘<div class="“notice" notice-success is-dismissible”><p>Зміни були збережені!</p></div>’;
    }

// 从数据库获取现有值,用于填充表单
    $current_text = get_option( ‘mfp_footer_text’, ‘这是默认的页脚文本。’ );
    ?&gt;
    <div class="“wrap”">
        <h1>Налаштування мого плагіна.</h1>
        <form method="“post”" action="/uk/“”/" data-trp-original-action="“”">
            <?php wp_nonce_field( ‘mfp_save_settings’, ‘mfp_settings_nonce’ ); ?>
            <table class="“form-table”">
                <tr>
                    <th scope="“row”"><label for="“mfp_footer_text”">Користувацький текст для футера сторінки</label></th>
                    <td>
                        <input name="“mfp_footer_text”" type="“text”" id="“mfp_footer_text”" value="“NO NUMERIC NOISE KEY" 1001” class="“regular-text”">
                        <p class="“description”">Цей текст буде відображатися внизу усіх сторінок веб-сайту.</p>
                    </td>
                </tr>
            </table>
            <?php submit_button(); ?>
        <input type="hidden" name="trp-form-language" value="uk"/></form>
    </div>
    &lt;?php
}

Ця функція виконує кілька ключових завдань: перевірку прав доступу та обробку подання форм (з використанням…) update_option Зберігання даних, а також рендеринг інтерфейсів форм. Зверніть увагу на те, що були використані певні технології чи інструменти для цього процесу. sanitize_text_field()esc_attr() Використовуйте функції безпеки для запобігання атакам типу XSS.

Зробити функції конфігурованими

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

Рекомендуємо до прочитання. Оволодійте розробкою плагінів для WordPress з нуля: повне керівництво та практичні заняття.

// 更新页脚文本函数,使其可配置
function mfp_add_footer_text() {
    // 从数据库获取保存的文本,如果没有则使用默认值
    $footer_text = get_option( ‘mfp_footer_text’, ‘感谢阅读!本页脚由“我的第一个功能插件”生成。’ );
    if ( !empty( $footer_text ) ) {
        echo ‘<p style="“text-align:" center; color: #666;”>’ . esc_html( $footer_text ) . ‘</p>’;
    }
}
add_action( ‘wp_footer’, ‘mfp_add_footer_text’ );

Ось так і створюється плагін із базовими функціями адміністрування. Користувачі можуть змінювати текст у бекенді, і ці зміни миттєво відображаються на фронтенд-сайті.

Найкращі практики розробки плагінів та безпека

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

Міжсерверний віртуальний хостинг
Віртуальний хостинг $2.50 USD на місяць, перший місяць $0.1 USD за промокодом tryinterserver, 461 скрипт хмарних додатків, встановлення в один клік.

Використання префіксів та іменних просторів

Усі визначені вами функції, класи, змінні та назви параметрів мають містити унікальні префікси, щоб уникнути конфліктів із основною частиною WordPress, темами чи іншими плагінами. У цьому прикладі ми використовуємо такі префікси. mfp_ „(Мій перший плагін)“ – це гарний префікс для назви першого створеного вами плагіна. Для більш складних плагінів варто врахувати можливість використання просторів імен PHP.

Проверка даних, їх очищення та ескапування

Ось у чому полягає суть безпеки плагінів: усі дані, надані користувачами (включаючи адміністраторів), мають вважатися ненадійними.
* 验证 (Validation): 检查数据是否符合预期格式(如是否为邮箱、数字)。
* 清理 (Sanitization): 在将数据存入数据库或用于其他操作前,移除其中的非法或危险字符。我们使用了 sanitize_text_field()
* 转义 (Escaping): 在将数据从数据库输出到 HTML、JavaScript 或 URL 时,进行转义以防止 XSS 攻击。我们使用了 esc_html()esc_attr()

Підготовка до інтернаціоналізації

Щоб плагін міг бути перекладений користувачами з усього світу, усі текстові елементи, призначені для користувачів, мають бути обгорнуті функціями інтернаціоналізації WordPress. Змініть спосіб відображення текстових даних у нашому плагіні.

echo ‘<p style="“text-align:" center; color: #666;”>’ . esc_html__( ‘感谢阅读!本页脚由“我的第一个功能插件”生成。’, ‘my-first-plugin’ ) . ‘</p>’;

І переконайтеся, що у коментарях на початку плагіна встановлені правильні значення. Text DomainПотім використовуйте такі інструменти, як Poedit, для створення файлів формату .pot.

Налаштування, тестування та підготовка до релізу

Перед тим, як впровадити плагін у продуктивне середовище або надати його до офіційного каталогу, ретельні тести є надзвичайно важливими.

Увімкніть режим налагодження.

У конфігураційному файлі WordPress wp-config.php У цьому режимі ви зможете бачити помилки, попередження та сповіщення PHP, що дуже допомагає під час розробки.

define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true ); // 将错误记录到 wp-content/debug.log 文件
define( ‘WP_DEBUG_DISPLAY’, false ); // 不在页面上直接显示错误

Проведення тестів функціональності та сумісності

  • Функціональне тестування: По черзі перевіряються всі функції плагіна: активація/деактивація, збереження налаштувань, а також правильність відображення інформації на передньому інтерфейсі.
  • Тестування сумісності: Протестуйте свій плагін на різних версіях WordPress (особливо на старіших), версіях PHP (7.4+ та 8.x), а також у поширених темах та інших популярних плагінах.
  • Перевірка безпеки: Для запобігання таким вразливостям, як SQL-ін’єкції, XSS, CSRF тощо, можна використовувати автоматизовані інструменти або вручну перевіряти код. Поле Nonce, яке ми додали раніше, саме призначене для запобігання атакам типу CSRF.

Підготовка до публікації файлів

Якщо планується публікація, необхідна стандартна структура файлів. Зазвичай вона включає:
* 主插件文件 (如 my-first-plugin.php)
* readme.txtМатеріал має бути написаний у відповідності зі стандартами WordPress.org та призначений для відображення на сторінці каталогу плагінів.
* assets Папка: призначена для зберігання іконок, знімків екрана тощо.
* languages Папка: для зберігання файлів перекладу (.po/.mo).
* includes Папка: для зберігання інших файлів PHP-класів.
* uninstall.phpВизначення процедур очищення після видалення плагіна (наприклад, видалення записів з бази даних).

підсумок

За допомогою цього посібника ви пройшли повний процес розробки базового плагіна для WordPress: від створення головного файлу, який містить стандартну інформацію заголовка, до додавання функцій за допомогою дій-хаків (action hooks), а також від створення повноцінної сторінки налаштувань у панелі адміністрування до забезпечення її безпеки. Ми наголосили на використанні префіксів, безпечному обробленні даних та інших практиках, які сприяють кращій продуктивності плагіна, а також коротко описали кроки, необхідні для налагодження та публікації

Пам’ятайте, суть розробки плагінів полягає у розумінні та вмілому використанні величезної системи хуків (Hooks) та фільтрів (Filters) WordPress. Виходячи з цього невеликого плагіна, ви зможете далі досліджувати, як додавати скорочені коди (Shortcodes), віджети (Widgets), власні типи статей (Custom Post Types, CPT) чи кінцеві точки REST API, щоб створювати потужні, гнучкі та відповідні стандартам комерційні плагіни.

Часті запитання

Де саме має бути розміщений плагін?

Плагіни WordPress мають бути розміщені в wp-content/plugins/ Кожен плагін може бути окремим PHP-файлом (це підходить для найпростіших плагінів), але частіше практикується створення папки з ім’ям плагіна, у яку поміщається основний файл та інші ресурсні файли.

Як видалити дані, створені плагіном?

Коли користувач натискає на кнопку “Видалити” плагін у фоновому режимі, за замовчуванням видаляється лише файл плагіна, а таблиця параметрів плагіна, яка зберігається в базі даних, залишається недоторканою.wp_optionsДані, що знаходяться у цьому файлі, будуть збережені. Щоб повністю очистити систему, вам потрібно створити… uninstall.php Файл, і використовувати його всередині. delete_option() Функція призначена для видалення відповідних опцій. Цей файл виконується лише тоді, коли користувач видаляє плагін за допомогою функції видалення в WordPress.

У механізмі виконання дій (Hooks) що різниця між діями (Actions) та фільтрами (Filters)?

Дієві гачки (Action Hooks), що використовуються для... add_action()Це функція, яка дозволяє вставляти та виконувати певний фрагмент коду у WordPress у певний момент часу. Цей код не має повертати жодних значень. Наприклад, це може бути використання для виконання певної функції у відповідному розділі сайту (заголовок, футер) або пі

Фільтрові гаки (Filter Hooks), що використовуються для... add_filter()Це дозволяє вам змінювати дані, які передаються під час виконання певного процесу. Функція приймає певне значення, обробляє його та повинна повернути нове значення. Наприклад, це може стосуватися зміни заголовка статті, контенту коментаря або результат

Чому мій плагін не відображається у фоновому режимі (у бекенді)?

Спочатку переконайтеся, що ваш основний PHP-файл плагіна знаходиться у правильному каталозі, а також що належні коментарі щодо структури плагіна (особливо ті, які вказують місце розташування файлів плагіна) є належним чином оформлені. Plugin Name:По-перше, переконайтеся, що формат файлу є правильним та без помилок. По-друге, перевірте, чи немає у файлі граматичних помилок. Ви можете це зробити за допомогою спеціальних програм або інструментів для аналізу коду. wp-config.php Открити в Китаї WP_DEBUG Подивіться на можливу інформацію про помилки.