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

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

Розуміння базової архітектури плагінів WordPress

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

Склад основного файлу плагіна

Вхідна точка плагіна зазвичай є PHP-файлом, який має те саме ім’я, що й плагін. В заголовку цього файлу має бути розміщена стандартизована коментарна рядка, призначена для надання WordPress відповідної метаінформації про плагін. Ця коментарна рядка має містити принаймні ім’я плагіна, опис, версію, автора та ліцензію. Наприклад, для плагіна під назвою “My Custom Widget” основний файл має виглядати приблизно так:my-custom-widget.phpПочаток може виглядати ось так:

<?php
/**
 * Plugin Name: My Custom Widget
 * Plugin URI: https://www.example.com/my-custom-widget
 * Description: 这是一个用于演示的自定义小工具插件。
 * Version: 1.0.0
 * Author: Your Name
 * Author URI: https://www.example.com
 * License: GPL v2 or later
 * Text Domain: my-custom-widget
 */

У цьому коментарі поле “Plugin Name” є єдиним обов’язковим для розпізнавання плагіна системою WordPress. Інші поля є необов’язковими, але для забезпечення стандартизованості та зручності обслуговування плагіна рекомендується заповнювати їх повністю. Поле “Text Domain” використовується для інтернаціоналізації плагіна та є ключовим для додавання підтримки багатьох мов у майбутньому.

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

Найкращі практики структурування каталогу плагінів

Для простих плагінів може бути достатньо одного PHP-файла. Однак для плагінів із складними функціями необхідна чітка, модульна структура каталогів. Типовий професійний каталог плагіна може містити наступні частини:

UltaHost – хостинг для сайтів, побудованих на платформі WordPress
Гарантія повернення грошей протягом 30 днів, необмежена пропускна здатність мережі та доступ до баз даних, безкоштовний захист від DDoS-атак; знижка 50% при покупці на термін 3 роки (варіанти об’ємів трафіку: 4 ТБ/5
  • Головний файл (Main File)plugin-name.phpФайл-посібник для плагіна, який містить коментарі до початку файлу, а також основну логіку плагіна чи інструменти для його завантаження.
  • includes/src/Каталог призначений для зберігання основних файлів PHP-класів та функціональних модулів.
  • admin/Директорія, призначена для зберігання коду та сторінок, пов’язаних з інтерфейсом адміністративного керування.
  • public/frontend/Каталог містить логіку, яка відповідає за обробку даних, що відображаються на фронтенді веб-сайту.
  • assets/Каталог, що містить статичні ресурси: JavaScript, CSS, зображення тощо.
  • languages/Каталог, у якому зберігаються файли з міжнародними перекладами (.po/.mo).
  • uninstall.phpЦе необов’язковий, але рекомендований файл, який використовується для очищення бази даних та інших даних після видалення плагінів користувачем.

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

Оволодіння основними інструментами розробки: діями та фільтрами-хуками

Основною філософією розробки плагінів для WordPress є використання механізму “хуків” (Hooks). Цей механізм дозволяє вашим плагінам вступати в процес роботи основної системи WordPress у певні моменти часу, щоб змінювати або додавати нові функції, без необхідності безпосередньої модифікації основного коду. Хуки поділяються на два основні типи: хуки дій (Action Hooks) та хуки фільтрів (Filter Hooks).

Використання дійових хуків (action hooks)

Акційні хаки виконують ваш власний код під час виникнення певних подій. Наприклад, після публікації статті або під час ініціалізації меню у адміністративній панелі.add_action()Функція дозволяє “під’єднати” вашу функцію до певного механізму виконання дій (акційного хака).

Припустимо, ви хочете автоматично додавати у кінець кожної статті текст про авторські права. Для цього ви можете скористатися наявними інструментами чи програмними рішеннями, які дозволяють обробляти вміст сайту.the_contentЦей фільтр (зверніть увагу: це насправді фільтр, але його спосіб використання схожий на певні дії) – більш типовим прикладом його застосування є запис логів після автентифікації користувача. Ось приклад використання дій-хуків (action hooks).wp_footerПриклад виведення інформації у футері веб-сайту:

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

Функція myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Дякуємо, що використовуєте наш сайт!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

Коли WordPress виконує…wp_footerЦей етап виконання дії (зазвичай у рамках певної теми)…footer.phpВиклик у середині…wp_footer()Якщо викликати цю функцію, будуть запущені всі функції, які прикріплені до неї, включаючи ту, яку ми щойно определили.myplugin_add_footer_text

Використання фільтрів-хуків (filter hooks)

Фільтр-хаки (filter hooks) використовуються для модифікації даних. Вони отримують певну змінну, яка після обробки вашою функцією має бути повернута у зміненому вигляді. Це один із найпотужніших способів зміни за замовчуванням поведінки WordPress. Використовуйте їх з розуміadd_filter()Функція підключається (монтується) до системи.

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

hosting.com Віртуальний хостинг
Висока продуктивність завдяки процесорам AMD EPYC, SSD-накопичувачам NVMe і технології LiteSpeed, цілодобова експертна підтримка, розширені заходи безпеки, включаючи SSL, грубу силу, захист від шкідливих програм і DDoS, економія до 73%.
function myplugin_custom_excerpt_length( $length ) {
    // 将默认的55个单词改为20个单词
    return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' );

Ще одним поширеним випадком використання є зміна вигляду вихідного тексту статей. Наведений нижче код додає попереджувальне вікно перед всім вмістом статей:

function myplugin_add_content_notice( $content ) {
    if ( is_single() ) {
        $notice = '<div class="notice">Цей текст є оригінальним матеріалом; при його перепублікації необхідно вказати джерело.</div>';
        $content = $notice . $content;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_content_notice' );

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

Створення інтерфейсу для керування плагінами з боку сервера

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

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

Створити верхній меню та сторінку для керування

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

Наведений нижче приклад коду створює верхній меню-пейдж під назвою “Мої налаштування плагіна”:

Міжсерверний віртуальний хостинг
Віртуальний хостинг $2.50 USD на місяць, перший місяць $0.1 USD за промокодом tryinterserver, 461 скрипт хмарних додатків, встановлення в один клік.
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 权限(通常为manage_options,仅管理员可见)
        'myplugin-settings',    // 菜单别名(slug),用于URL
        'myplugin_settings_page_html', // 用于渲染页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(使用Dashicons)
        80                     // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 定义渲染页面内容的回调函数
function myplugin_settings_page_html() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1><p><strong>  <p><strong></h1>
        <form action="/uk/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、非ces等(需要与settings API配合使用)
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="uk"/></form>
    </div>
    &lt;?php
}

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

Безпосереднє використання форм для передачі та обробки даних пов’язане з ризиками для безпеки. API налаштувань (Settings API) WordPress надає набір безпечних та стандартизованих засобів для реєстрації, перевірки та зберігання параметрів налаштувань. Цей API автоматично забезпечує перевірку значень типу nonce, перевірку прав доступу та очищення переданих даних.

Використання API налаштувань (Settings API) зазвичай включає три кроки:
1. Налаштування реєстрації: використовуйтеregister_setting()Визначте набір опцій та їхні функції перевірки (відповідні калебри).
2. Додайте блок налаштувань: використовуйте цей блок для налаштування параметрів системи.add_settings_section()Додайте до сторінки новий блок.
3. Додайте поле для налаштувань: використовуйте це поле для встановлення потрібних параметрів.add_settings_field()Додайте конкретні поля для введення даних всередині блоку.

Ось спрощений приклад того, як зареєструвати поле для введення текстового варіанту відповіді:

function myplugin_settings_init() {
    // 1. 注册一个设置选项组
    register_setting( 'myplugin_options', 'myplugin_options_field', array(
        'sanitize_callback' => 'myplugin_sanitize_text_field' // 清理函数
    ) );

// 2. 添加一个设置区块
    add_settings_section(
        'myplugin_section_main',
        '主要设置',
        null, // 可选的区块描述回调函数
        'myplugin-settings'
    );

// 3. 为区块添加一个字段
    add_settings_field(
        'myplugin_field_text',
        '示例文本',
        'myplugin_field_text_html', // 渲染字段HTML的回调函数
        'myplugin-settings',
        'myplugin_section_main',
        array( 'label_for' => 'myplugin_field_text' )
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染函数
function myplugin_field_text_html() {
    $options = get_option( 'myplugin_options_field' );
    $value = isset( $options['text'] ) ? $options['text'] : '';
    ?>
    <input type="text" id="myplugin_field_text" name="myplugin_options_field[text]" value="<?php echo esc_attr( $value ); ?>" class="regular-text">
    <?php
}

// 数据清理函数
function myplugin_sanitize_text_field( $input ) {
    $sanitized_input = array();
    if ( isset( $input['text'] ) ) {
        $sanitized_input['text'] = sanitize_text_field( $input['text'] );
    }
    return $sanitized_input;
}

Реалізація фронтенд-функцій плагіна та короткого коду

Плагіни призначені не лише для роботи у фоновій частині системи (бекенді), але й, що ще важливіше, для надання функціоналу передньому інтерфейсу веб-сайту. Окрім зміни контенту за допомогою хуків (hooks), як згадувалося раніше, короткі коди (Shortcodes) є потужним інструментом для надання динамічних можливостей редакторам контенту

Створення та використання скорочених кодів

Короткі коди дозволяють користувачам надсилати повідомлення за допомогою простого тегу, наприклад Short codes allow users to send messages using a simple tag, such as <.[my_gallery]Вбудовувати складні функції у статті чи сторінки. Використовувати…add_shortcode()Функція для реєстрації короткого коду.

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

function myplugin_hello_shortcode( $atts, $content = null ) {
    // 解析短代码属性,并提供默认值
    $attributes = shortcode_atts(
        array(
            'name' =&gt; '访客',
            'color' =&gt; 'blue',
        ),
        $atts,
        'hello' // 短代码标签
    );

// 确保颜色值安全
    $color = esc_attr( $attributes['color'] );
    $name = esc_html( $attributes['name'] );

// 构建输出
    $output = '<button style="background-color: ' . $color . '; padding: 10px; color: white; border: none;">';
    $output .= '你好,' . $name . '!';
    $output .= '</button>';

// 如果短代码是封闭式的(有内容),则包含内容
    if ( ! is_null( $content ) ) {
        $output .= '<div>'. do_shortcode($content)'.'</div>';
    }

return $output;
}
add_shortcode( 'hello', 'myplugin_hello_shortcode' );

Користувачі можуть використовувати цей інструмент у редакторі статей наступним чином:
* [hello name="张三" color="red"]
* [hello]点击我![/hello]

Додайте до плагіна власні додаткові функції (міні-інструменти).

Віджети (Widgets) – це блоки контенту, які розташовуються у бічній панелі чи внизу сторінки WordPress. Щоб створити власний клас віджета, необхідно розширити відповідні функціональні механізми системи WordPress.WP_WidgetБазовий клас, який реалізує кілька ключових методів: конструктор, метод виведення даних на передній екран та метод оновлення форми.

Створіть простий інструмент, який відображатиме заголовки останніх статей.

class Myplugin_Recent_Posts_Widget extends WP_Widget {
    // 构造方法:定义小工具ID、名称和描述
    public function __construct() {
        parent::__construct(
            'myplugin_recent_posts',
            '我的插件:近期文章',
            array( 'description' =&gt; '显示您网站的最新文章列表。' )
        );
    }

// 前端显示逻辑
    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        if ( ! empty( $instance['title'] ) ) {
            echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
        }

$posts = get_posts( array( 'numberposts' =&gt; $instance['number'] ?: 5 ) );
        echo '<ul>';
        foreach ( $posts as $post ) {
            setup_postdata( $post );
            echo '<li><a href="/uk/' . get_permalink( $post->ID ) . '/">' . get_the_title( $post-&gt;ID ) . '</a></li>';
        }
        wp_reset_postdata();
        echo '</ul>';

echo $args['after_widget'];
    }

// 后台小工具表单
    public function form( $instance ) {
        $title = ! empty( $instance['title'] ) ? $instance['title'] : '近期文章';
        $number = ! empty( $instance['number'] ) ? $instance['number'] : 5;
        ?&gt;
        <p>
            <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">Заголовок:</label>
            <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
        </p>
        <p>
            <label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>">Відображати кількість статей:</label>
            <input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="number" min="1" value="<?php echo esc_attr( $number ); ?>">
        </p>
        &lt;?php
    }

// 更新小工具设置
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[&#039;title&#039;] = ( ! empty( $new_instance[&#039;title&#039;] ) ) ? sanitize_text_field( $new_instance[&#039;title&#039;] ) : &#039;&#039;;
        $instance[&#039;number&#039;] = ( ! empty( $new_instance[&#039;number&#039;] ) ) ? absint( $new_instance[&#039;number&#039;] ) : 5;
        return $instance;
    }
}

// 注册这个小工具
function myplugin_register_widget() {
    register_widget( &#039;Myplugin_Recent_Posts_Widget&#039; );
}
add_action( &#039;widgets_init&#039;, &#039;myplugin_register_widget&#039; );

підсумок

Розробка плагінів для WordPress – це процес, який поєднує в собі програмування на мові PHP та глибоке розуміння основної архітектури системи WordPress. Початком успішної розробки є створення файлової структури, що відповідає стандартам, а також правильного вигляду головного файлу плагіна. Далі важливо відмінно опанувати механізми дій (actions) та фільтрів (filters), адже саме вони дозволяють вашому коду втручатися у процес обробки даних у точно визначений момент. Для забезпечення зручного користувацького інтерфейсу налаштувань необхідно використовувати API Admin Menu та Settings API WordPress для створення безпечного та стандартизованого інтерфейсу адміністрування. Нарешті, за допомогою коротких кодів (shortcodes) та власних додаткових функцій (custom widgets) ви можете безперешкодно інтегрувати функції плагіна у вміст та дизайн веб-сайту, надаючи користувачам гнучкі можливості для відображення інформації. Дотримуючись цих основних принципів, ви зможете створювати потужні, структуровані та легкі у обслуговуванні плагіни для WordPress.

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

Які необхідні передумови для розробки плагінів для WordPress?

Вам потрібні міцні знання PHP-програмування, а також базове розуміння HTML, CSS та JavaScript. Ознайомлення з концепціями об’єктно-орієнтованого програмування (OOP) буде дуже корисним під час розробки великих плагінів. Крім того, необхідні такі інструменти, як локальне середовище розробки (наприклад, Local by Flywheel, XAMPP, MAMP) та інтегровані середовища розробки (IDE) для редагування коду (наприклад, VS Code, PhpStorm).

Як гарантувати, що плагін, який я розробляю, є безпечним та високопродуктивним?

Щодо безпеки: завжди перевіряйте та очищуйте дані, введені користувачами, використовуючи вбудовані функції WordPress.sanitize_text_field(), esc_html(), wp_kses()Під час обробки форм та Ajax-запитів обов’язково використовуйте механізм перевірки nonce (нон-сесійних ідентифікаторів). Для цього можна скористатися вбудованими класами для роботи з базою даних WordPress.$wpdbЦе робиться для запобігання виконанню зловмисного коду через SQL-ін’єкції. Щодо продуктивності: скрипти та стилі завантажуються лише тоді, коли це необхідно (за допомогою певних механізмів).wp_enqueue_script()Встановіть розумні умови залежностей та завантаження. За допомогою API Transients зберігайте у кеші результати тривалих запитів до бази даних. Уникайте виконання великої кількості непотрібних запитів до бази даних під час ініціалізації плагінів.

Як мені налагоджувати та тестувати свій плагін?

На етапі розробки, будь ласка, виконуйте наступні дії:wp-config.phpУвімкнено функцію використання файлів.WP_DEBUGWP_DEBUG_LOGЦе дозволить записувати PHP-помилки та попередження у файли журналу, що полегшить виявлення проблем. Для перегляду мережевих запитів та помилок JavaScript використовуйте інструменти розробника браузера. Для налагодження логіки коду також можна скористатися відповідними засобами.error_log()Функції та плагіни на кшталт “Query Monitor” є чудовими інструментами. Обов’язково протестуйте їх на різних версіях PHP та WordPress, щоб переконатися у їхній сумісності.

Як додати підтримку інтернаціоналізації до мого плагіна?

По-перше, необхідно правильно налаштувати параметри у коментарях на початку головного файлу.Text Domain(Наприклад: my-plugin-text-domain). У коді всі рядки, які потрібно перекласти, слід позначити спеціальними маркерами.__()або_e()Функція-обгортка (function wrapper), яка передає ваш текстовий домен. Потім використовуйте інструменти на кшталт Poedit для створення необхідних файлів..potШаблонний файл, на основі якого генеруються версії документа для різних мов..po.moПерекладіть файл та розмістіть його у плагіні./languages/Зміст.

Після завершення розробки, як опублікувати свій плагін?

Ви можете вибрати спосіб розповсюдження свого плагіна: опублікувати його в офіційному каталозі плагінів WordPress – це найпоширеніший варіант. Для цього ваш плагін має відповідати вимогам ліцензії GPL та пройти сувору перевірку коду. Також ви можете розповсюджувати плагін на власному веб-сайті або на сторонніх ринках. У будь-якому випадку обов’язково надайте чітку документацію, журнал оновлень, інформацію про сумісність з іншими плагінами та програмним забезпеченням, а також створіть план постійного обслуговування т