概要説明
REST APIを使用するとWordPress外部からウェブサイトのデータを取得することができるようになります。こちらの機能を使用していない場合は必要のない機能となりますので無効化するカスタマイズ。プラグインでREST APIを使用しているものもあるため特定の条件で有効化する方法も掲載。
~ 目次 ~
REST APIを無効化 ( 管理者、Contact Form 7 プラグイン は有効 )
functions.php
/*---------------------------------------------------- REST APIを無効化 ( 管理者、Contact Form 7 は有効 ) ----------------------------------------------------*/ if ( !function_exists( 'disabled_restapi_except_plugin' ) ){ function disabled_restapi_except_plugin( $result, $wp_rest_server, $request ){ $namespace = $request->get_route(); // 管理者の場合除外 if ( current_user_can( 'manage_options' ) ) { return $result; } // Contact Form 7 はreset api を使用しているため除外 if( strpos( $namespace, 'contact-form-7/' ) !== false ){ return $result; } return new WP_Error( 'rest_disabled', array( 'status' => rest_authorization_required_code() ) ); } add_filter( 'rest_pre_dispatch', 'disabled_restapi_except_plugin', 10, 3 ); // rel="https://api.w.org/" の表示制御 remove_action( 'wp_head', 'rest_output_link_wp_head' ); }
管理画面から作業する人には影響が無いように除外が必要です。サイトヘルスや記事編集などに影響がでてきます。
REST APIにアクセスして結果が変化したことを確認
https://サイトURL/wp-json/
{"code":"rest_disabled","message":{"status":401},"data":null}
有効後に上記json結果が表示されるようになっていれば無効化されています。
ソース内のREST API情報が非表示になっていることを確認
<link rel="https://api.w.org/" href="https://サイトURL/wp-json/" />
上記のタグが非表示になっているかを確認します。
Contact Form 7 プラグインを使用している場合は送信確認
お問合せフォームから正常にメールが送信されるかを確認してください。
Contact Form 7以外にもREST APIを使用しているプラグインがあるので、動作がおかしいと思ったらRESET APIを有効にして正常動作することを確認してから無効化の除外条件を調整することをおすすめ致します。
All in One SEO プラグインを除外する場合 ( 複数条件指定 )
functions.php
// Contact Form 7 はreset api を使用しているため除外 if( strpos( $namespace, 'contact-form-7/' ) !== false ){ return $result; } // All in One SEO はreset api を使用しているため除外 if( strpos( $namespace, 'aioseo/' ) !== false ){ return $result; }
除外判定用の条件を確認する方法
$namespace をdebug.logに出力できるようにし、プラグイン利用画面を表示させることで実行パスを確認することができます。
プラグインで対応を行う場合 – SiteGuard WP Plugin
SiteGuard WP Plugin にてREST APIの無効化ができます。除外するプラグインなどもGUIで対応ができるのでおすすめですが、設定変更により管理画面が正常機能しなくなった場合に設定を元に戻せなくなる可能性があります。