WordPress4.7からWP REST APIがデフォルトで有効となりました。
特に設定していなければ、管理画面にログインしていなくとも投稿や固定ページ、カスタム投稿やメディアといったコンテンツ一式を取得、表示することが可能です。
参考:WP REST APIを使って静的HTMLページにWordPressの投稿情報を表示する
勝手に情報を取得されると困る、というケースもあると思います。
ここではREST APIでエンドポイントを無効にし、情報を取得できないように設定する方法をご紹介します。
記載するソースコード例
非ログイン状態でのREST API エンドポイントを無効にするソースコードです。
「namespaces」で例外を追加しており、例ではoembedとcontactform7を追加しています。
不要な場合は該当箇所を削除します。
/* * REST APIを無効にする * * Embed以外 * * License: GPLv2 or later */ function nendebcom_deny_restapi_except_embed( $result, $wp_rest_server, $request ){ $namespaces = $request->get_route(); // /oembed/1.0 if( strpos( $namespaces, 'oembed/' ) === 1 ){ return $result; } // /contact-form-7/v1 if( strpos( $namespaces, 'contact-form-7/' ) === 1 ){ return $result; } return new WP_Error( 'rest_disabled', __( 'The REST API on this site has been disabled.' ), array( 'status' => rest_authorization_required_code() ) ); } add_filter( 'rest_pre_dispatch', 'nendebcom_deny_restapi_except_embed', 10, 3 );
上記コードをfunctions.phpに記載します。バックアップは必ず取るようにしましょう。
確認方法
無事にREST APIが無効になっているかの確認方法は、以下のアドレスにアクセスします。
※id1の記事のREST APIにアクセスします
下記のような文言が表示されていれば、無事REST APIが無効になっています。
{"code":"rest_disabled","message":"The REST API on this site has been disabled.","data":{"status":401}}
ちなみに、当サイトの場合無効にしていないため、表示されています。
https://highfivecreate.com/wp-json/wp/v2/posts/?p=1
コードはWordPress4.7 の WP REST API を無効にする – ねんでぶろぐを参考にさせていただきました。
参考元では、JetPackやGutenbergへの対応方法が記載されています。