【WordPress】特定のプラグインが動作するようにREST APIを無効化する方法
MENU
  1. HOME
  2. WordPress / カスタマイズ
  3. 【WordPress】特定のプラグインが動作するようにREST APIを無効化する方法

最近の作業実績

  • 2024年04月06日非レスポンシブのサイトをレスポンシブ化いたしました。
  • 2024年04月05日テーマファイルが編集できない不具合を解消いたしました。
  • 2024年04月04日WordPress、テーマ、プラグイン、のバージョンアップを担当いたしました。
  • 2024年04月03日不具合で表示されなくなったサイトを表示される状態まで復旧いたしました。
  • 2024年04月02日お問い合わせフォームを再構築いたしました。
  • 2024年04月01日不具合で表示されなくなったサイトを表示される状態まで復旧いたしました。
  • 2024年03月31日サーバー移管に共に表示されなくなったサイトを表示される状態まで復旧いたしました。
  • 2024年03月30日WordPressの操作方法をサポートいたしました。
  • 2024年03月29日サイドバーに人気記事を表示させる仕組みを導入いたしました。
  • 2024年03月28日テキスト等の簡易な修正を行いました。
  • 2024年03月27日アイキャッチが表示されない不具合を修正いたしました。
  • 2024年03月26日WordPressの操作方法をサポートさせていただきました。
  • 2024年03月25日サイト上で発生していたリンクの不具合を解消いたしました。
  • 2024年03月24日不具合で表示されなくなったサイトを表示される状態まで復旧いたしました。
  • 2024年03月23日WordPress、テーマ、プラグイン、のバージョンアップを担当いたしました。
  • 2024年03月22日WordPressにログインできない不具合を解消いたしました。
  • 2024年03月21日既存サイトにセキュリティ対策を導入いたしました。
  • 2024年03月20日メールフォーム周りで発生していた不具合を解消いたしました。
  • 2024年03月19日記事一覧をカテゴリー単位で表示できる様にカスタマイズいたしました。
  • 2024年03月18日WordPress、テーマ、プラグイン、のバージョンアップを担当いたしました。
  • このエリアには直近の制作実績を一部掲載しております。
  • 制作実績はリアルタイム反映ではありません。

【WordPress】特定のプラグインが動作するようにREST APIを無効化する方法

この投稿は2019/09/15に加筆修正いたしました。

WordPressのREST APIを無効化したらプラグインが動かなくなってお困りではありませんか?このページでは、特定のプラグインが動作するようにREST APIを無効化する方法をご紹介しています。ぜひ、参考になさってください。

この記事は約 7 分で読めます。

最近関わった案件で、プラグインを導入しても正常に動作しないケースに出会いました。
例えば、「Contact Form 7」で作成したメールフォームが正常に送信できません。

最初は原因がよく分からなかったのですが、クライアントにヒアリングをしてみると、WordPressのREST APIを無効にしていると分かりました。

REST APIを有効化すると、プラグインは正常に動作します。
どうやらREST APIを無効化していたのが原因だったようです。

これで解決かと思ったのですが、クライアントからの要望で、REST APIはどうしても無効化したいとのこと。

REST API機能無効化してしまうと、REST APIを使っているプラグインは正常に動作しなくなります。特定のプラグインを動作させつつREST APIを無効化しなければなりません。

今回は、プラグインを動作させつつREST APIを無効化する方法をご紹介します。

特定のプラグインでREST APIを無効化する方法

単純にREST APIを無効化する場合、以下のコードをfunctions.phpに追記すればOKです。

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

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

しかしこのままでは、REST APIを使っているプラグインは正常に動作しません。

指定したプラグインではREST APIが使えるようにコードをカスタマイズする必要があります。

REST APIを使いたいプラグインを指定する

REST APIをそのまま使いたいプラグインの指定は以下のようにします。
functions.phpに、以下のコードを記述しましょう。

function restapi_except_plugins( $result, $wp_rest_server, $request ){
$namespaces = $request->get_route();
if( strpos( $namespaces, 'プラグイン名/' ) === 1 ){
return $result;
}
if ( current_user_can( 'edit_posts' ) ) {
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', 'restapi_except_plugins', 10, 3 );

注目してもらいたいのは、上記の赤文字【プラグイン名】の部分です。
この部分でREST API使えるようにしたいプラグイン名を記述してやります。
例えば、【jetpack】など。

【jetpack】でREST API使えるようにしたい場合は、以下のように置き換えてやります。

function restapi_except_plugins( $result, $wp_rest_server, $request ){
$namespaces = $request->get_route();
if( strpos( $namespaces, 'jetpack/' ) === 1 ){
return $result;
}
if ( current_user_can( 'edit_posts' ) ) {
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', 'restapi_except_plugins', 10, 3 );

上記のようにお好きなプラグイン名に置き換えてください。

ただし、このプラグイン名にはちょっと注意が必要です。
続きをご覧ください。

プラグイン名には【ディレクトリ名】を記述する

先ほどのコードに記述するプラグイン名には、プラグインの【ディレクトリ名】を指定してやりましょう。プラグイン名は、単純にプラグインの名前を記述しても動作しないので注意が必要です。

ディレクトリ名が正解なのかどうかここはちょっと曖昧なのですが、基本的にプラグインの【ディレクトリ名】を記述してやれば大丈夫です。

jetpack、contact-form-7、redirection、wordpress-popular-posts

この辺りのプラグインで試したところ、ディレクトリ名で正常に動作しました。

もしも、ディレクトリ名で動作しないプラグインがある場合は、今回の方法では対応できない可能性があります。

複数のプラグインを指定する場合

先ほどのコードでは、1つのプラグインのみを対象としました。
複数のプラグインでREST APIを使いたい場合、以下のコードを使用します。

function restapi_except_plugins( $result, $wp_rest_server, $request ){
$namespaces = $request->get_route();
if( strpos( $namespaces, 'プラグイン名/' ) === 1 ){
return $result;
}
if( strpos( $namespaces, 'プラグイン名/' ) === 1 ){
return $result;
}
if ( current_user_can( 'edit_posts' ) ) {
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', 'restapi_except_plugins', 10, 3 );

上記は2つのプラグインを対象としたコードです。
プラグイン名の部分は書き換えてください。

if( strpos( $namespaces, 'プラグイン名/' ) === 1 ){
return $result;
}

上記の部分を増やせば、いくつでもプラグインを指定してやることができます。
プラグイン名の部分は書き換えてください。

WordPressのバージョンが4.9以降の場合

if ( current_user_can( 'edit_posts' ) ) {
return $result;
}

上記の部分は必須となります。
削除すると投稿や固定ページの編集画面が表示されなくなります。

WordPressのバージョン4.9以降は、エディタの仕様が大きく変わりました。

新エディタはREST APIを使っているので、上記のコードを削除すると新エディタが正常に動作せず、編集画面自体が開けなくなってしまいます。

とりあえず、上記のコードを消さないのが無難です。

まとめ

特定のプラグインが動作するようにREST APIを無効化する方法をご紹介しました。

REST APIを無効化すると、REST APIを使っているプラグインが動作しなくなります。
特定のプラグインが動作するようにREST APIを無効化する方法をまとめてみました。

どなたかの参考になれば幸いです。

Wordpressのカスタマイズや不具合など
何かお困りのことはありませんか?

Wordpressに関連するあなたのお悩み、解決いたします。
次のような方は、お気軽にご相談下さい。

  • Wordpressサイトをカスタマイズしたいが、やり方が分からないで困っている。カスタマイズの知識が豊富な人に任せたい。
  • Wordpressサイトに不具合が発生したが、直し方が分からない。不具合の修正経験が豊富な人に任せたい。
  • 既存サイトにWordPressを導入したいが、やり方が複雑で自分ではできそうにもない。経験が豊富な人に任せたい。
  • WordPressがハッキングされたが修正の仕方が分からない。サイトを元通りにできる人を探している。
  • Wordpressで0からサイトを制作したいが、自分ではできそうにもない。プロにサイト制作を委託したい。

一つでも該当する方は、以下のフォームからお気軽にご相談下さい。

WordPressに関して今すぐ相談する

著者:takaya kondo

岡山在住のWordPress専門フリーランサーです。Wordpressを使ったWEBサイト制作を中心に10年間ほど活動させていただいています。

Wordpress関連の記事でお役に立てれば幸いです。

【関連記事】あなたが興味のありそうな関連記事をご紹介します。

コメントを残す

(必須)

CAPTCHA