WordPress4.7.0以降で「REST API」を無効にする方法が変わっていたので試しました

WordPressの「REST APIを無効にする」ために、以下のように「rest_enabled」を使っている方もいらっしゃると思います。

add_filter( 'rest_enabled', '__return_false' );

ところで、WordPress4.7.0からは「rest_enabled」を使うことは非推奨とされたようで、以下のようなNoticeエラーが表示されるようになっていました。

Notice: rest_enabled の使用はバージョン 4.7.0 から<strong>非推奨</strong>になっています! 代わりに rest_authentication_errors を使ってください。 The REST API can no longer be completely disabled, the rest_authentication_errors can be used to restrict access to the API, instead. in(以下省略)

エラーメッセージの内容を読むと「rest_authentication_errors」を使って無効にする方法が案内されているので、以下のように書きました。(リクエストされた時に表示する文言やステータスコードなどは適宜変えればOKだと思います)

add_filter( 'rest_authentication_errors', 'disable_rest' );
function disable_rest(){
 return new WP_Error( 'disabled', array( 'status' => rest_authorization_required_code() ) );
}

WordPress4.7.0からはREST APIのコンテンツエンドポイントをサポートするようで、Codexに以下のように書いてありました。

REST API コンテンツエンドポイント
WordPress コンテンツ用の API エンドポイント。WordPress Version 4.7 は投稿、コメント、ターム、ユーザー、メタ、設定用の REST API エンドポイントをサポートします。外部のプラグラムはクリアで標準的なインターフェースを使用して WordPress サイトにアクセスできます。サイトとのコミュニケーションにまったく新しい革新的な道が開かれます。

前までは「WP REST API」プラグインを有効にしないと使えなかったはずなんですがWordPress4.7.0以降はプラグインを使わなくても、コンテンツエンドポイントに誰でもアクセスできちゃうってことなんですかね。(解釈が間違っていたらすみません)

これは便利だと思う一方で「REST APIが使える状態を望んでいないこともあるし、外部に提供する必要もない」という考え方もできるので、無効にする方法を試していたところ、今回の対応したって感じです。

もっと「こうしたほうがいいよ!」とか「いい方法があるよ!」とか、そもそも「こういう考え方があるんで、別に無効にしなくてもいいんじゃないか」などご提案・ご意見などがありましたら、是非ともご教示いただけますと嬉しいです。

著者:bouya Imamura