WordPressプラグインを審査に出す前の準備【前編】提出ブロックを回避する
自作のWordPressプラグインをWordPress.org公式ディレクトリに公開したい!
でも、提出しても差し戻されたり、そもそも提出自体がブロックされたりするケースが後を絶ちません。審査は「動くかどうか」だけでなく、セキュリティ・品質・ガイドライン準拠が厳しくチェックされます。
この記事(前編)では、提出前に整えるべきすべての準備を詳しく解説します。後編では提出後の差し戻し対応からSVN公開までをカバーします。
⚠️ 2025年の重要アップデート(必読)
- 新規提出には2FA(2段階認証)が必須になりました
- 提出時にPlugin Checkが自動実行され、エラーがあると提出自体がブロックされます
- readme.txt・プラグインヘッダー・申請フォームはすべて英語で記述する必要があります
この記事のゴール
- 提出前の「落ちる原因」を潰し、差し戻しを最小化する
- レビュー担当が確認しやすい形(readme / ヘッダー / ZIP構成)に整える
- 提出後のやりとりまで見越して、慌てない体制を作る
全体像:提出〜公開までの流れ
① 提出用ZIPを作る ② Plugin Check(必須)+セルフチェックで不備を潰す ③ 提出フォームからZIPをアップロード ④ レビューチームから指摘 → 修正 → 反映(後編で解説) ⑤ 承認後、SVNリポジトリへ初回リリース(後編で解説)
1. 公式ガイドラインを最初に読む(最短ルートです)
▶ ここでやること:審査基準の大枠を把握し、地雷を避ける
差し戻しの多くは「コードが動かない」ではなく、セキュリティ・品質・ガイドライン違反です。提出前に公式ドキュメントをざっと通しておくだけで、無駄な差し戻しを大幅に減らせます。
必ず目を通すべきドキュメント
| ドキュメント | 内容 |
|---|---|
| Detailed Plugin Guidelines | 審査の詳細ガイドライン(全18項目) |
| Plugin Security | セキュリティ要件(差し戻し最多) |
| How Your readme.txt Works | readme.txtの書き方 |
レビューでよく指摘される項目TOP5
💡 これだけは先に潰しておく:
- 出力のエスケープ不足(esc_html, esc_attr, esc_url など)
- 入力のサニタイズ不足(sanitize_text_field, absint など)
- Nonce検証の不足(CSRF対策)
- 権限チェックの不足(current_user_can)
- 直接アクセス防止の不足(defined(‘ABSPATH’))
「自分は大丈夫」と思っていても、人の目で見ると漏れていることが多いです。意識的にチェックしましょう。
2. WordPress.orgアカウントを準備する(2FA必須!)
▶ ここでやること:アカウント作成と2段階認証の設定
プラグインを提出するには、WordPress.orgのアカウントが必要です。そして2025年現在、新規プラグイン提出には2FA(2段階認証)が必須になっています。
2-1. アカウント作成
- 登録ページにアクセス:https://login.wordpress.org/register
- Username(ユーザー名)を入力
- これがreadme.txtの
Contributorsに記載する名前になります - 後から変更できないので慎重に決めましょう
- これがreadme.txtの
- Email(メールアドレス)を入力
- 審査結果の通知がここに届きます
- 確実に受信できるアドレスを使用してください
- 確認メールからパスワードを設定
2-2. 2FA(2段階認証)を有効化する
新規プラグイン提出では、WordPress.orgアカウントに2FAが設定されていないと、提出ボタンを押しても先に進めません。提出直前に慌てないよう、先に設定しておきましょう。
2FA設定手順
- WordPress.orgにログイン
- 右上のアバターをクリック → Edit Profile
- Security タブを開く
- Two-Factor Authentication セクションで設定
- 認証アプリ(Google Authenticator, Authy など)を推奨
- QRコードをスキャンして登録
- 復旧コード(Backup Codes)を必ず保存
- スマホを紛失した時に必要になります
- 安全な場所に保管してください
✅ アカウント準備チェックリスト □ WordPress.orgアカウント作成済み □ 2FA有効化済み(認証アプリ推奨) □ 復旧コード(Backup Codes)を安全に保管 □ SVNパスワードを確認(承認後に使用)
3. プラグインヘッダーを整える(審査担当が最初に見る場所)
▶ ここでやること:メインPHPファイルの先頭に正しいヘッダー情報を記載する
プラグインヘッダーは、レビュー担当が最初に確認する入口です。ここが雑だと「情報が取れないプラグイン」として印象が悪くなります。
3-1. ヘッダーの雛形(コピペOK)
Description を含め、すべて英語で書きます。日本語での説明は、プラグイン内の管理画面や、公開後の翻訳システムで対応しましょう。
<?php
/**
* Plugin Name: Your Plugin Name
* Plugin URI: https://example.com/your-plugin
* Description: A brief description in English (recommended ~140 characters).
* Version: 1.0.0
* Requires at least: 6.0
* Requires PHP: 7.4
* Author: Your Name
* Author URI: https://example.com
* License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: your-plugin-slug
* Domain Path: /languages
*/
// Prevent direct access
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
3-2. 各項目の詳細説明
| 項目 | 説明 | 注意点 |
|---|---|---|
Plugin Name |
プラグインの表示名 | 商標侵害に注意 |
Version |
現在のバージョン | readme.txtのStable tagと完全一致必須 |
Requires at least |
必要な最低WPバージョン | readme.txtと一致させる |
Requires PHP |
必要な最低PHPバージョン | readme.txtと一致させる |
Text Domain |
翻訳用のドメイン | フォルダ名(slug)と一致必須 |
License |
ライセンス | GPL互換必須 |
3-3. よくある差し戻しポイント(ヘッダー編)
❌ よくあるミス
・Version が readme.txt の Stable tag と一致していない(1.0 vs 1.0.0 もNG)
・Requires at least / Requires PHP を readme.txt にだけ書いてヘッダーに書き忘れ
・Text Domain がフォルダ名と違う
・Description を日本語で書いてしまう
・直接アクセス防止(defined('ABSPATH'))を入れ忘れる
3-4. ライセンスと同梱物(超重要)
WordPress.orgに公開するプラグインは、GPL互換ライセンスが必須です。これはプラグイン本体だけでなく、同梱するすべてのファイルに適用されます。
- JavaScript / CSS:MITやBSDなどGPL互換ならOK
- 画像 / フォント:配布可能なライセンスか確認
- 外部ライブラリ:LICENSEファイルや著作権表記は消さない
「フリー素材だから大丈夫」と思っていても、商用利用不可や再配布不可のライセンスの場合があります。必ず確認しましょう。
4. readme.txt を作成する(プラグインページの命)
▶ ここでやること:WordPress.org標準フォーマットで英語のreadme.txtを作成する
readme.txt は超重要ファイルです。レビュー時に必ず確認され、公開後はプラグインページの説明文のベースになります。
4-1. readme.txt が重要な理由
- レビュー時に必ず見られる
- 公開後、プラグインページの説明・FAQ・更新履歴の元データになる
- 「Stable tag」や「Tested up to」のズレは差し戻しの常連
readme.txt の内容がそのままWordPress.orgのプラグインページになります。審査チームも世界中のユーザーも英語で読むため、すべて英語で記述してください。日本語版は公開後に翻訳システム(translate.wordpress.org)で対応できます。
4-2. readme.txt の雛形(コピペOK)
=== Your Plugin Name === Contributors: yourwporgusername Donate link: https://example.com/donate Tags: utility, admin, tool Requires at least: 6.0 Tested up to: 6.7 Stable tag: 1.0.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html A short description of your plugin in one line (max 150 characters, no markup). == Description == Write a detailed description of your plugin here. Explain what it does, why users need it, and what makes it unique. **Key Features:** * Feature 1: Brief explanation * Feature 2: Brief explanation * Feature 3: Brief explanation **Use Cases:** * When you need to do X * When you want to achieve Y == Installation == **From WordPress Admin:** 1. Go to "Plugins" → "Add New" 2. Search for "Your Plugin Name" 3. Click "Install Now" and then "Activate" **Manual Installation:** 1. Download the plugin ZIP file 2. Go to "Plugins" → "Add New" → "Upload Plugin" 3. Select the ZIP file and click "Install Now" 4. Activate the plugin == Frequently Asked Questions == = Is this plugin free? = Yes, this plugin is completely free and open source. = Where can I find the settings? = Go to "Settings" → "Your Plugin Name" in your WordPress admin. = Does this plugin work with my theme? = Yes, this plugin is designed to work with any properly coded WordPress theme. == Screenshots == 1. Settings page - Configure the plugin options here 2. Frontend display - How it looks on your site == Changelog == = 1.0.0 = * Initial release == Upgrade Notice == = 1.0.0 = Initial release of the plugin.
4-3. 各項目の詳細と注意点
| 項目 | 説明 | 注意点 |
|---|---|---|
Contributors |
プラグイン作者 | WordPress.orgのユーザー名を記載(任意の名前ではない) |
Tags |
検索用タグ | 5個まで、英語で |
Tested up to |
テスト済みWPバージョン | 実際にテストしたバージョンを記載(未検証で上げない) |
Stable tag |
安定版バージョン | PHPヘッダーのVersionと完全一致 |
4-4. Stable tag: trunk は使わない
新規申請では
Stable tag: trunk は避けてください。素直に 1.0.0 のようにtags配下のバージョン運用を前提にしたほうが安全です。trunkを使うと自動アップデートで問題が発生することがあります。4-5. Readme Validator で検証する(必須)
作成したreadme.txtは、提出前に必ず公式バリデーターでチェックしましょう。
🔗 Readme Validator: https://wordpress.org/plugins/developers/readme-validator/
- readme.txt の内容をコピー
- バリデーターにペースト
- 「Validate」をクリック
- エラーが出たら修正
4-6. 英語が苦手な方へ:翻訳のコツ
readme.txt を英語で書くのは大変に感じるかもしれませんが、以下の方法で乗り切れます。
- Google翻訳 / DeepL:まず日本語で書いてから翻訳
- ChatGPT / Claude:「以下をWordPressプラグインのreadme.txt用の英語に翻訳して」と依頼
- 他のプラグインを参考に:似た機能のプラグインのreadme.txtを見て表現を真似る
完璧な英語である必要はありません。文法が多少おかしくても、伝わればOKです。審査チームは世界中の非ネイティブからの申請に慣れています。
5. Plugin Check で検査する(提出前の必須タスク)
▶ ここでやること:公式チェックツールでプラグインを検査し、ERRORをゼロにする
5-1. Plugin Check とは
Plugin Check(PCP)は、WordPress.org公式が提供するプラグイン検査ツールです。提出時に行われるチェックの多くを、開発者側で事前に実行できます。
5-2. なぜ「必須」なのか
新規提出では、提出時にPlugin Check(Plugin Repoカテゴリ)が自動実行されます。ERRORがあると提出自体がブロックされ、先に進めません。「出してから直す」では遅いのです。
5-3. インストールと使い方
インストール
- WordPress管理画面 → プラグイン → 新規追加
- 「Plugin Check」で検索
- Plugin Check (PCP) をインストール → 有効化
使い方
- 管理画面 → ツール → Plugin Check
- チェックしたいプラグインを選択
- カテゴリで「Plugin repo」を選択(これが提出時のチェックに近い)
- 「チェックを実行」をクリック
5-4. 結果の読み方
| 種類 | 意味 | 対応 |
|---|---|---|
| 🔴 ERROR | 致命的・ガイドライン抵触の可能性大 | 必ずゼロにする(提出ブロック) |
| 🟡 WARNING | 問題の可能性あり | 可能な限り対応、理由を説明できる状態に |
| 🔵 INFO | 改善提案 | 余裕があれば対応 |
5-5. よく出る指摘と対処法
① エスケープ不足(最頻出)
// ❌ NG: エスケープなし echo $user_input; echo $url; echo "<input value='$value'>"; // ✅ OK: 適切なエスケープ関数を使用 echo esc_html( $user_input ); echo esc_url( $url ); echo "<input value='" . esc_attr( $value ) . "'>";
② サニタイズ不足
// ❌ NG: サニタイズなし $value = $_POST['value']; // ✅ OK: サニタイズあり $value = sanitize_text_field( wp_unslash( $_POST['value'] ) ); $email = sanitize_email( $_POST['email'] ); $number = absint( $_POST['number'] );
③ Nonce / Capability チェック不足
// ❌ NG: 検証なしで保存
if ( isset( $_POST['save'] ) ) {
update_option( 'my_option', $_POST['value'] );
}
// ✅ OK: Nonce + 権限チェックあり
if ( isset( $_POST['save'] ) ) {
// Nonce検証
if ( ! isset( $_POST['_wpnonce'] ) ||
! wp_verify_nonce( $_POST['_wpnonce'], 'my_save_action' ) ) {
wp_die( 'Security check failed' );
}
// 権限チェック
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'Permission denied' );
}
// サニタイズして保存
update_option( 'my_option', sanitize_text_field( $_POST['value'] ) );
}
④ 直接アクセス防止の不足
// すべてのPHPファイルの先頭に入れる
if ( ! defined( 'ABSPATH' ) ) {
exit; // または die();
}
⑤ プレフィックスの問題
// ❌ NG: プレフィックスが短い(4文字未満)
function wcp_init() {}
// ❌ NG: 汎用的すぎる
function init() {}
function plugin_setup() {}
// ✅ OK: 4文字以上のユニークなプレフィックス
function your_plugin_init() {}
function your_plugin_activate() {}
class Your_Plugin_Main {}
⑥ テキストドメインの不整合
// ❌ NG: テキストドメインがslugと違う __( 'Hello', 'wrong-domain' ); // ❌ NG: テキストドメインが変数 $domain = 'my-plugin'; __( 'Hello', $domain ); // ✅ OK: プラグインのslugと一致する文字列リテラル __( 'Hello', 'your-plugin-slug' );
5-6. 誤検知(False Positive)について
Plugin Checkには誤検知(false positive)もあります。ただし「無理やり黙らせる」より、まずは本当に問題かを確認し、必要ならレビュー担当に説明できる状態にしておくのが安全です。
5-7. 推奨:Securityカテゴリも実行
「Plugin repo」カテゴリに加えて、「Security」カテゴリも実行しておくと、セキュリティ上の問題を先に発見できます。
6. 提出用ZIPを作成する(構成ミスで落ちるのを防ぐ)
▶ ここでやること:正しい構成でZIPファイルを作成する
6-1. 正しいフォルダ構成
ZIPの直下には、プラグインフォルダが1つだけ入っている状態にします。
your-plugin-slug.zip
└── your-plugin-slug/
├── your-plugin-slug.php ← メインファイル
├── readme.txt ← 必須
├── includes/
│ ├── class-main.php
│ └── class-admin.php
├── assets/
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── script.js
└── languages/
└── your-plugin-slug.pot
6-2. よくある「二重フォルダ」事故
❌ NG: 二重フォルダ(解凍するとフォルダの中にフォルダ)
your-plugin-slug.zip
└── your-plugin-slug/
└── your-plugin-slug/
├── your-plugin-slug.php
└── readme.txt
✅ OK: 正しい構成(解凍するとすぐにプラグインフォルダ)
your-plugin-slug.zip
└── your-plugin-slug/
├── your-plugin-slug.php
└── readme.txt
6-3. ZIPに含めないもの
以下のファイル・フォルダは必ず除外してください。
.git//.github/:バージョン管理用node_modules/:npm依存パッケージvendor/:Composer依存パッケージ(必要なものだけ残す場合あり)tests/:テストファイル.gitignore/.editorconfig:設定ファイルcomposer.json/package.json:開発用設定.DS_Store(Mac)/Thumbs.db(Windows):OS生成ファイル- APIキー / パスワード / ログファイル:機密情報
6-4. ZIPの作成方法
Mac / Linux(ターミナル)
# プラグインフォルダの親ディレクトリに移動
cd /path/to/plugins
# 不要ファイルを除外してZIP作成
zip -r your-plugin-slug.zip your-plugin-slug \
-x "*.git*" \
-x "*.DS_Store" \
-x "*__MACOSX*" \
-x "*node_modules*" \
-x "*.editorconfig"
Windows(PowerShell)
# プラグインフォルダを圧縮 Compress-Archive -Path "C:\path\to\your-plugin-slug" -DestinationPath "C:\path\to\your-plugin-slug.zip"
確認方法
作成したZIPを別の場所で解凍して、正しい構成になっているか確認しましょう。
7. 提出前チェックリスト(コピペ用)
すべて ✅ になったら、いよいよ提出です!
【アカウント】
□ WordPress.orgアカウント作成済み
□ 2FA(2段階認証)有効化済み
□ 復旧コード(Backup Codes)を安全に保管
【プラグインヘッダー】
□ 必須項目をすべて記載(Plugin Name, Version, License など)
□ Description を英語で記載
□ Text Domain がフォルダ名(slug)と一致
□ 直接アクセス防止(defined('ABSPATH'))を追加
□ ライセンスがGPL互換(同梱物含む)
【readme.txt】
□ 英語で記載
□ 標準フォーマットに従っている
□ Readme Validator でエラーゼロ
□ Stable tag が PHPヘッダーの Version と完全一致
□ Tested up to は実際にテストしたバージョン
□ Contributors が WordPress.org のユーザー名
□ Stable tag: trunk を使っていない
【Plugin Check】
□ Plugin repo カテゴリの ERROR がゼロ
□ WARNING は理由を説明できる状態
□ (推奨)Security カテゴリも実行してチェック
【ZIP構成】
□ ZIP直下にプラグインフォルダが1つ(二重フォルダなし)
□ 不要ファイルを除外(.git, node_modules, .DS_Store など)
□ 機密情報が含まれていない
【整合性】
□ フォルダ名 = Text Domain = slug が一致
□ PHPヘッダーの Version = readme.txt の Stable tag
□ PHPヘッダーの Requires at least / Requires PHP = readme.txt の値
まとめ(前編)
ここまでで、提出に必要な準備がすべて整いました。
前編のポイント
- 2FAが必須:設定していないと提出できない
- すべて英語で記述:readme.txt、PHPヘッダー、申請フォーム
- Plugin CheckでERRORゼロ:ERRORがあると提出自体がブロックされる
- バージョン番号の整合性:PHPヘッダーとreadme.txtで完全一致
- 正しいZIP構成:二重フォルダに注意
後編では、以下を解説します:
- 提出フォームの入力方法とslugの注意点
- 差し戻しメールが来た時の正しい対応方法
- 承認後のSVN初回リリース手順
→ 後編:差し戻し対応から公開までに続く



コメント