先に答えを書きます。WordPress 7.0では、REST route を登録するときの permission_callback が、実質必須になりました。省略すると doing_it_wrong の通知が出て、リクエストが弾かれます。5.5からあった警告が、7.0で「止める」方向に強くなった形です。
そして、いちばん大事なのはここです。permission_callback を省略した route は、これまで「誰でもアクセスできる公開エンドポイント」として動いていました。うっかり省略や、プロパティ名のタイポで、意図せず公開されていた、という事故が、実際に人気プラグインで複数起きています。7.0対応のついでに、全ルートを点検する価値があります。(2026年7月時点。最終的には公式のフィールドガイドで確認してください)
なぜ、省略が危ないのか
REST APIは、permission_callback の無い route を「公開」として扱います。つまり、書き忘れると、そのエンドポイントは誰でも叩ける状態になります。
こわいのは、これが無言で起きることです。エラーも警告もなく、ただ公開される。だから、権限チェックのつもりだったコードが、実は素通しになっていても、気づけません。5.5で doing_it_wrong の通知が入ったのは、この「気づけない公開」を可視化するためでした。7.0は、それをさらに進めて、省略時にリクエストを止めにいきます。
もう一つの罠が、タイポです。permission_callback を permision_callback のように綴り間違えると、その引数は「無い」ものとして扱われ、route は公開になります。名前が少しズレただけで、権限チェックがまるごと外れる。これも、実際に起きてきた事故です。
正しい書き方
公開してよいエンドポイントなら、__return_true を明示します。「省略した公開」と「意図した公開」を、コードの上で区別するためです。
// ✅ 公開エンドポイント:__return_true を明示する
register_rest_route('my-plugin/v1', '/status', [
'methods' => 'GET',
'callback' => 'my_status_callback',
'permission_callback' => '__return_true',
]);
権限が要るエンドポイントは、current_user_can で必要な権限を指定します。
// ✅ 権限が要るエンドポイント:current_user_can で絞る
register_rest_route('my-plugin/v1', '/settings', [
'methods' => 'POST',
'callback' => 'my_save_settings',
'permission_callback' => function () {
return current_user_can('manage_options');
},
]);
条件によって細かく分けたいなら、コールバックは $request を受け取れるので、その中で判定できます。返すのは true / false か、WP_Error です。
// ✅ リクエスト内容で分岐する
'permission_callback' => function (WP_REST_Request $request) {
$id = (int) $request['id'];
if (! current_user_can('edit_post', $id)) {
return new WP_Error('forbidden', '権限がありません', ['status' => 403]);
}
return true;
},
既存プラグインの点検手順
7.0に上げる前に、自分のプラグインの全 route を見ておきます。
まず、register_rest_route を全部grepして、それぞれに permission_callback があるかを確認します。
grep -rn "register_rest_route" ./ --include=*.php
見つけた各 route について、次を確かめます。permission_callback が書かれているか。綴りが正確か(permission_callback で1文字も違わないか)。そして、公開のつもりなら __return_true が明示されているか、非公開なら current_user_can で適切に絞られているか。
「今まで動いていたから大丈夫」は、ここでは通用しません。動いていたのは、省略が公開として素通しされていたからかもしれない、という目で見ます。
よくある勘違い
__return_true は「危ない」ものではありません。公開してよいデータに対して、公開だと明示するための、正しい書き方です。避けるべきは __return_true そのものではなく、「省略して、暗黙に公開してしまう」ことです。
逆に、なんでも current_user_can('manage_options') で塞げばいい、でもありません。公開すべきデータまで管理者権限で囲うと、フロントから読めなくなって別の不具合になります。そのエンドポイントが、誰に開かれているべきかを、route ごとに決めます。
早見でまとめ
- 7.0で
permission_callbackは実質必須。省略すると通知が出てリクエストが弾かれる - 省略・タイポの route は「公開」扱いになる。過去に事故が起きている
- 公開は
__return_trueを明示、非公開はcurrent_user_can、細かくはWP_Error -
register_rest_routeを全部grepして、各 route を点検する - 綴りは1文字も間違えない。
permission_callbackのタイポは公開と同じ
REST route を持つプラグインは、7.0対応の中でも、ここは優先度が高いところです。表示が崩れるバグと違って、権限の穴は、見た目には出ません。上げる前に、一度grepして全部見ておくのが安全です。役に立ったらストックして、7.0対応のとき見返してください。
参考(公式):
- WordPress 7.0 Field Guide: https://make.wordpress.org/core/2026/05/14/wordpress-7-0-field-guide/
- REST API changes in WordPress 5.5(permission_callback の経緯): https://make.wordpress.org/core/2020/07/22/rest-api-changes-in-wordpress-5-5/
ふだんはraplsworks.comで、WordPressプラグイン開発やClaude Codeまわりのことを書いています。