📝 WordPress.org

Как опубликовать плагин в 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. Создать аккаунт

  1. Перейдите на login.wordpress.org/register
  2. Введите email и желаемый username (это будет ваше публичное имя contributor)
  3. Подтвердите email

1.2. Включить 2FA (ОБЯЗАТЕЛЬНО с октября 2024)

Без 2FA подать плагин на review невозможно.

  1. Войдите в свой профиль на profiles.wordpress.org
  2. Перейдите в Account → Security
  3. В разделе Two-Factor Authentication выберите способ: TOTP (Google Authenticator, Authy) или backup codes
  4. Подтвердите включение 2FA вводом первого кода
  5. Сохраните backup codes в надёжном месте — без них восстановление доступа будет крайне сложным
⚠️ Внимание: с 1 октября 2024 года все авторы плагинов и тем обязаны использовать 2FA + Application Passwords для SVN-доступа. Без этого SVN commits отклоняются.

Шаг 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.
✅ Совет: Stable tag в readme.txt должен ТОЧНО соответствовать имени тега в SVN (например 1.0.0). При несовпадении плагин не пройдёт автопроверку.

Шаг 3: Plugin Check Tool (обязательная самопроверка)

С 2024 года WordPress.org требует прогона через официальный Plugin Check до подачи:

  1. Установите плагин Plugin Check в свой локальный WordPress
  2. Активируйте
  3. В админке: Tools → Plugin Check
  4. Выберите ваш плагин из списка
  5. Нажмите Check it!
  6. Исправьте ВСЕ errors (без них submission будет автоматически отклонён)
  7. Постарайтесь убрать warnings — это ускорит human review

Типичные ошибки которые ловит Plugin Check:

  • Использование eval(), exec(), system()
  • Прямой доступ к глобальным переменным без санитизации
  • SQL-запросы без $wpdb->prepare()
  • Отсутствие nonce-проверки в формах
  • Подключение внешних JS/CSS без wp_enqueue_*
  • Несовпадение Stable tag в readme.txt и Version в header
  • Использование зарезервированных префиксов

Шаг 4: Подача плагина на review

  1. Перейдите на wordpress.org/plugins/developers/add/
  2. Войдите в свой wordpress.org аккаунт
  3. Заполните Plugin Name (это финальное название — менять потом нельзя)
  4. Заполните Plugin URL — ссылка на главную страницу плагина (например, https://toncoinshop.com/apps/wp-ton-rates/)
  5. Кратко опишите назначение плагина в нескольких предложениях
  6. Загрузите ZIP-архив (имя файла = slug плагина)
  7. Согласитесь с Plugin Guidelines
  8. Подтвердите подачу
📌 Важно: slug плагина (имя в URL) присваивается автоматически на основе Plugin Name. Если имя содержит trademark (например "Toncoin Plugin") — заявка будет отклонена. Используйте описательные имена: "TON Exchange Rates", "TON Trust Score Badge".

Шаг 5: Процесс модерации (1-14 дней)

После подачи происходит следующее:

  1. Auto-scan через Plugin Check Tool — если есть errors, заявка отклоняется автоматически с указанием проблем
  2. Human review модератором — проверяется на безопасность, соответствие гайдлайнам, корректность лицензии, отсутствие trademark-нарушений
  3. При наличии замечаний — приходит email с инструкциями что исправить
  4. Исправления отправляются ответом на тот же email с обновлённым ZIP
  5. При 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 (НЕ обычный пароль!)
⚠️ Application Password (обязательно с 2024): для SVN-доступа используется НЕ обычный пароль WP.org, а специальный Application Password. Создаётся в profiles.wordpress.org → Account → Application Passwords. Сохраните при создании — повторно увидеть нельзя.

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.png128×128 pxИконка в каталоге (обязательно)
icon-256x256.png256×256 pxRetina-версия иконки
banner-772x250.png772×250 pxHeader страницы плагина (обязательно)
banner-1544x500.png1544×500 pxRetina-версия 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 до публикации фикса

❌ Частые причины отказа

  1. Trademark conflict. Имя плагина содержит зарегистрированный товарный знак (WordPress, Google, Facebook без разрешения). Решение: переименовать на "for [Brand]" или избегать упоминания.
  2. Несоблюдение GPL. Включение GPL-несовместимого кода (например, проприетарных JS-библиотек). Решение: использовать только GPL-совместимые библиотеки.
  3. Plugin Check errors. Не прогнали через Plugin Check. Решение: установите плагин Plugin Check локально и прогоните до подачи.
  4. Phoning home без согласия. Отправка данных на сторонний сервер без явного opt-in пользователя. Решение: добавить opt-in checkbox в настройках.
  5. Слабая защита от XSS/SQLi. Решение: использовать esc_html(), esc_attr(), $wpdb->prepare() везде.
  6. Obfuscated code. Минифицированный или обфусцированный код. Решение: предоставлять полный исходник.
  7. Missing readme sections. Отсутствуют обязательные секции в readme.txt. Решение: использовать официальный template.
  8. Спам в 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 проходили эту процедуру по описанному выше алгоритму:

Исходники всех трёх доступны на GitHub.

Вопросы по публикации: @denissatoshi · Официальные ресурсы: developer.wordpress.org/plugins/