Как опубликовать плагин в WordPress.org Plugin Directory
Полная пошаговая инструкция. Актуально на 2026 год: обязательная 2FA, Plugin Check Tool, требования по SVN. Время прохождения модерации: от 1 до 14 дней.
Чтобы опубликовать плагин в WordPress.org Plugin Directory: (1) создайте аккаунт на wordpress.org и включите 2FA, (2) подготовьте плагин по гайдлайнам и прогоните через Plugin Check Tool, (3) отправьте ZIP через форму wordpress.org/plugins/developers/add/, (4) дождитесь approval (1-14 дней), (5) загрузите код через SVN в выделенный репозиторий, (6) плагин автоматически появится в каталоге.
📦 Что нужно подготовить заранее
До начала процесса убедитесь что у вас есть:
- Готовый плагин с уникальным slug-именем (latin lowercase, без trademark-конфликтов)
- readme.txt в специальном WP-формате (см. ниже)
- GPL-совместимая лицензия — обычно GPL-2.0-or-later
- Аккаунт wordpress.org с подтверждённым email
- Включённая двухфакторная аутентификация (2FA) — обязательно с конца 2024
- SVN клиент (TortoiseSVN на Windows, svn в терминале на macOS/Linux)
- Privacy Policy URL если плагин отправляет данные на сторонние сервисы
- Иконки 256×256 и 128×128 PNG
- Баннеры 1544×500 и 772×250 PNG
- Скриншоты (минимум 1, рекомендуется 3-5)
Шаг 1: Регистрация на WordPress.org и обязательная 2FA
1.1. Создать аккаунт
- Перейдите на login.wordpress.org/register
- Введите email и желаемый username (это будет ваше публичное имя contributor)
- Подтвердите email
1.2. Включить 2FA (ОБЯЗАТЕЛЬНО с октября 2024)
Без 2FA подать плагин на review невозможно.
- Войдите в свой профиль на profiles.wordpress.org
- Перейдите в Account → Security
- В разделе Two-Factor Authentication выберите способ: TOTP (Google Authenticator, Authy) или backup codes
- Подтвердите включение 2FA вводом первого кода
- Сохраните backup codes в надёжном месте — без них восстановление доступа будет крайне сложным
Шаг 2: Подготовка плагина и readme.txt
2.1. Plugin header в главном PHP-файле
Файл должен называться по slug плагина и содержать стандартный header:
<?php
/**
* Plugin Name: Название плагина
* Plugin URI: https://toncoinshop.com/apps/your-slug/
* Description: Краткое описание (одна фраза)
* Version: 1.0.0
* Requires at least: 6.0
* Requires PHP: 7.4
* Author: TonCoinShop
* Author URI: https://toncoinshop.com/
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: your-text-domain
*/
if (!defined('ABSPATH')) { exit; }
// дальше код плагина
2.2. Файл readme.txt
Это критически важный файл. Шаблон:
=== Plugin Name ===
Contributors: your-wp-org-username
Tags: ton, toncoin, crypto, widget (макс. 5)
Requires at least: 6.0
Tested up to: 6.5
Stable tag: 1.0.0
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Краткое описание в 1-2 строки (макс 150 символов).
== Description ==
Полное описание плагина с поддержкой Markdown-like форматирования.
Используйте подзаголовки = Heading =, ** для bold, * для списков.
= Features =
* Возможность 1
* Возможность 2
== Installation ==
1. Загрузите плагин
2. Активируйте
3. Используйте
== Frequently Asked Questions ==
= Вопрос 1? =
Ответ 1.
== Screenshots ==
1. Описание первого скриншота
2. Описание второго скриншота
== Changelog ==
= 1.0.0 =
* Initial release
== Upgrade Notice ==
= 1.0.0 =
First public release.
1.0.0). При несовпадении плагин не пройдёт автопроверку.
Шаг 3: Plugin Check Tool (обязательная самопроверка)
С 2024 года WordPress.org требует прогона через официальный Plugin Check до подачи:
- Установите плагин Plugin Check в свой локальный WordPress
- Активируйте
- В админке: Tools → Plugin Check
- Выберите ваш плагин из списка
- Нажмите Check it!
- Исправьте ВСЕ errors (без них submission будет автоматически отклонён)
- Постарайтесь убрать warnings — это ускорит human review
Типичные ошибки которые ловит Plugin Check:
- Использование
eval(),exec(),system() - Прямой доступ к глобальным переменным без санитизации
- SQL-запросы без
$wpdb->prepare() - Отсутствие nonce-проверки в формах
- Подключение внешних JS/CSS без
wp_enqueue_* - Несовпадение
Stable tagв readme.txt иVersionв header - Использование зарезервированных префиксов
Шаг 4: Подача плагина на review
- Перейдите на wordpress.org/plugins/developers/add/
- Войдите в свой wordpress.org аккаунт
- Заполните Plugin Name (это финальное название — менять потом нельзя)
- Заполните Plugin URL — ссылка на главную страницу плагина (например,
https://toncoinshop.com/apps/wp-ton-rates/) - Кратко опишите назначение плагина в нескольких предложениях
- Загрузите ZIP-архив (имя файла = slug плагина)
- Согласитесь с Plugin Guidelines
- Подтвердите подачу
Шаг 5: Процесс модерации (1-14 дней)
После подачи происходит следующее:
- Auto-scan через Plugin Check Tool — если есть errors, заявка отклоняется автоматически с указанием проблем
- Human review модератором — проверяется на безопасность, соответствие гайдлайнам, корректность лицензии, отсутствие trademark-нарушений
- При наличии замечаний — приходит email с инструкциями что исправить
- Исправления отправляются ответом на тот же email с обновлённым ZIP
- При approval — приходит email с доступом к SVN-репозиторию
Типичное время прохождения:
- Чистый код без warnings, корректный readme: 1-3 дня
- Минорные замечания: 1-2 недели (с учётом переписки)
- Серьёзные проблемы: 2-4 недели
Шаг 6: Загрузка кода через SVN
После approval вы получите доступ к https://plugins.svn.wordpress.org/your-slug/. Этот SVN — это release-репозиторий, а не development. В git ваш код может быть где угодно, но финальный релиз заливается сюда.
6.1. Структура SVN репозитория
your-slug/
├── trunk/ # Текущая разработка
│ ├── your-slug.php
│ ├── readme.txt
│ └── ...
├── tags/ # Снимки релизов
│ ├── 1.0.0/
│ └── 1.0.1/
├── branches/ # (обычно не используется)
└── assets/ # Иконки, баннеры, скриншоты
├── icon-128x128.png
├── icon-256x256.png
├── banner-772x250.png
├── banner-1544x500.png
├── screenshot-1.png
└── ...
6.2. Первый коммит
# Чекаут пустого репозитория
svn co https://plugins.svn.wordpress.org/your-slug/ ~/wp-svn-your-slug
cd ~/wp-svn-your-slug
# Копируем плагин в trunk
cp -r /path/to/your/plugin/* trunk/
# Добавляем
svn add trunk/*
# Делаем тег для первого релиза
svn cp trunk tags/1.0.0
# Копируем ассеты
cp /path/to/icons/* assets/
svn add assets/*
# Коммитим (потребует логин WP.org и Application Password)
svn ci -m "Version 1.0.0 release"
# Username: ваш wp.org username
# Password: ваш Application Password (НЕ обычный пароль!)
6.3. Дальнейшие релизы
# Обновляем trunk
# (Update Stable tag в readme.txt + Version в plugin header!)
svn ci -m "Prepare 1.0.1"
# Создаём новый тег
svn cp trunk tags/1.0.1
svn ci -m "Tagging version 1.0.1"
# Plugin auto-update подхватит изменение через 5-30 минут
Шаг 7: Ассеты (иконки, баннеры, скриншоты)
Все ассеты загружаются в папку assets/ SVN-репозитория. Они НЕ являются частью плагина (пользователи их не получают), но отображаются на странице плагина на wordpress.org.
| Файл | Размер | Назначение |
|---|---|---|
icon-128x128.png | 128×128 px | Иконка в каталоге (обязательно) |
icon-256x256.png | 256×256 px | Retina-версия иконки |
banner-772x250.png | 772×250 px | Header страницы плагина (обязательно) |
banner-1544x500.png | 1544×500 px | Retina-версия header |
screenshot-N.png | ≥1280px шир. | Скриншоты (рекомендуется 3-5) |
Каждый скриншот должен быть описан в readme.txt в секции == Screenshots == с тем же номером.
Шаг 8: Обновления и поддержка плагина
- Update flow: поднимите Version в header → обновите Stable tag в readme.txt → svn cp trunk tags/X.Y.Z → svn ci
- Support forum: автоматически появится по адресу
wordpress.org/support/plugin/your-slug/— отвечайте на вопросы в течение 2-3 дней для поддержания рейтинга - Compatibility: при выходе новой версии WordPress обновляйте поле
Tested up toв readme.txt — даже без изменений в коде это покажется как обновление - Security: при обнаружении уязвимости сообщайте через private security channel до публикации фикса
❌ Частые причины отказа
- Trademark conflict. Имя плагина содержит зарегистрированный товарный знак (WordPress, Google, Facebook без разрешения). Решение: переименовать на "for [Brand]" или избегать упоминания.
- Несоблюдение GPL. Включение GPL-несовместимого кода (например, проприетарных JS-библиотек). Решение: использовать только GPL-совместимые библиотеки.
- Plugin Check errors. Не прогнали через Plugin Check. Решение: установите плагин Plugin Check локально и прогоните до подачи.
- Phoning home без согласия. Отправка данных на сторонний сервер без явного opt-in пользователя. Решение: добавить opt-in checkbox в настройках.
- Слабая защита от XSS/SQLi. Решение: использовать
esc_html(),esc_attr(),$wpdb->prepare()везде. - Obfuscated code. Минифицированный или обфусцированный код. Решение: предоставлять полный исходник.
- Missing readme sections. Отсутствуют обязательные секции в readme.txt. Решение: использовать официальный template.
- Спам в Tags. Использование нерелевантных tags для SEO-манипуляции. Решение: максимум 5 точных тегов.
✅ Финальный чеклист перед подачей
- ☐ Plugin header заполнен корректно (Version, Requires PHP, Requires at least, License)
- ☐ readme.txt содержит все обязательные секции
- ☐ Stable tag в readme === Version в header
- ☐ Plugin Check Tool прошёл без errors
- ☐ 2FA на wordpress.org аккаунте включена
- ☐ Application Password создан для SVN
- ☐ Privacy policy URL готов (если есть data collection)
- ☐ Иконки и баннеры подготовлены
- ☐ Минимум 1 скриншот готов
- ☐ Plugin URI указывает на landing страницу плагина
- ☐ Локально протестирован: activate/deactivate/uninstall работают чисто
📦 Пример: наши плагины
Все три плагина TonCoinShop проходили эту процедуру по описанному выше алгоритму:
- TON Exchange Rates — slug
ton-exchange-rates - TON Trust Score Badge — slug
ton-trust-score-badge - TONCS Index Widget — slug
toncs-index-widget
Исходники всех трёх доступны на GitHub.