wp-rest-api について
WordPress 開発者向けに、REST API の実装と保守を案内するスキルです。ルート設計、権限、入力検証、レスポンス処理、トラブルシューティングを扱います。
主な機能
- 01REST ルートの安全な登録
- 02コンテンツタイプとタクソノミーの公開
- 03リクエスト引数の検証とサニタイズ
- 04フィールド、メタデータ、リンクの拡張
- 05認証と権限エラーの診断
活用シーン
- 01プラグインやテーマへの独自エンドポイント追加
- 02REST レスポンスでの独自コンテンツタイプ公開
- 03401、403、404 エラーの診断
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ firecrawl/ agent-skills --skill wp-rest-apiインストール後、Claude Code で/wp-rest-apiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authentication.mdcustom-content-types.mddiscovery-and-params.mdresponses-and-fields.mdroutes-and-endpoints.mdschema.md詳細
WP REST API
使用する場面
次の作業が必要な場合に、このスキルを使用します。
- REST ルート/エンドポイントを作成または更新する
- 401/403/404 エラーや、権限/nonce の問題をデバッグする
- REST レスポンスにカスタムフィールド/メタデータを追加する
- カスタム投稿タイプやタクソノミーを REST 経由で公開する
- スキーマと引数のバリデーションを実装する
- レスポンスのリンク/埋め込み/ページネーションを調整する
必要な入力
- リポジトリのルートと対象のプラグイン/テーマ/mu-plugin(エントリーポイントのパス)。
- 使用する名前空間とバージョン(例:
my-plugin/v1)、およびルート。 - 認証方式(Cookie と nonce、アプリケーションパスワード、認証プラグインのいずれか)。
- 対象となる WordPress のバージョン制約(6.9 未満の場合は明記してください)。
手順
0) REST の使用状況を確認して場所を特定する
- トリアージを実行します。
node skills/wp-project-triage/scripts/detect_wp_project.mjs
- 既存の REST の使用箇所を検索します。
register_rest_routeWP_REST_Controllerrest_api_initshow_in_rest、rest_base、rest_controller_class
サイト全体のリポジトリの場合は、コードを変更する前に対象のプラグイン/テーマを選択してください。
1) 適切な方法を選択する
- CPT/タクソノミーを
wp/v2で公開する場合:- 必要に応じて
show_in_rest => trueとrest_baseを使用します。 - 必要に応じて
rest_controller_classを指定します。 references/custom-content-types.mdを読みます。
- 必要に応じて
- カスタムエンドポイントの場合:
rest_api_initでregister_rest_route()を使用します。- 単純でない処理には、コントローラークラス(
WP_REST_Controllerのサブクラス)を優先します。 references/routes-and-endpoints.mdとreferences/schema.mdを読みます。
2) ルートを安全に登録する(名前空間、メソッド、権限)
- 一意の名前空間
vendor/v1を使用します。コアの場合を除き、wp/*は避けてください。 - 必ず
permission_callbackを指定します(公開エンドポイントには__return_trueを使用します)。 WP_REST_Server::READABLE/CREATABLE/EDITABLE/DELETABLE定数を使用します。rest_ensure_response()またはWP_REST_Responseでデータを返します。- 明示的な
statusを指定したWP_Errorでエラーを返します。
references/routes-and-endpoints.md を読みます。
3) リクエスト引数をバリデーション/サニタイズする
type、default、required、validate_callback、sanitize_callbackを含めてargsを定義します。- JSON Schema によるバリデーションを優先し、その後
rest_sanitize_value_from_schemaを使用します。 - エンドポイント内で
$_GET/$_POSTを直接読み取らないでください。WP_REST_Requestを使用します。
references/schema.md を読みます。
4) レスポンス、フィールド、リンク
- デフォルトのエンドポイントからコアのフィールドを削除しないでください。代わりにフィールドを追加します。
- 計算フィールドには
register_rest_fieldを使用し、メタデータにはshow_in_restを指定してregister_metaを使用します。 object/array型のメタデータには、show_in_rest.schemaでスキーマを定義します。- フィルターされていない投稿コンテンツ(例:HTML を挿入する ToC プラグイン)が必要な場合は、
?context=editをリクエストしてcontent.rawにアクセスします(認証が必要です)。レスポンスを小さく保つため、_fields=content.rawと組み合わせてください。 - 関連するリソースへのリンクは
WP_REST_Response::add_link()で追加します。
references/responses-and-fields.md を読みます。
5) 認証と認可
- wp-admin/JS の場合:Cookie 認証と
X-WP-Nonce(アクションwp_rest)。 - 外部クライアントの場合:アプリケーションパスワード(Basic 認証)または認証プラグイン。
- 「ログイン済み」かどうかだけでなく、
permission_callbackで権限を確認します(認可)。
references/authentication.md を読みます。
6) クライアント向けの動作(検出、ページネーション、埋め込み)
- 検出が機能することを確認します(
Linkヘッダーまたは<link rel="https://api.w.org/">)。 _fields、_embed、_method、_envelope、ページネーションヘッダーをサポートします。per_pageの上限は 100 です。
references/discovery-and-params.md を読みます。
検証
/wp-json/インデックスに名前空間が含まれている。- ルートへの
OPTIONSリクエストでスキーマが返される(指定されている場合)。 - エンドポイントが期待どおりのデータを返し、権限エラーでは適切に 401/403 が返される。
show_in_restが true の場合、CPT/タクソノミーのルートがwp/v2に表示される。- リポジトリの lint/テストと、PHP/JS のビルド手順を実行する。
エラーの種類とデバッグ
- 404:
rest_api_initが実行されない、ルートのタイプミス、またはパーマリンクが無効です(?rest_route=を使用してください)。 - 401/403:nonce/認証がない、または
permission_callbackが厳しすぎます。 permission_callbackがない場合の_doing_it_wrong:追加してください(公開する場合は__return_trueを使用してください)。- 無効なパラメーター:
argsスキーマまたは検証コールバックがない、あるいは正しくありません。 - フィールドが表示されない:
show_in_restが false、メタが登録されていない、または CPT がcustom-fieldsをサポートしていません。
エスカレーション
バージョンサポートや動作が不明な場合は、パターンを独自に考案する前に、REST API ハンドブックとコアドキュメントを確認してください。
コメント
Markdown 対応