【WordPress】特定のプラグインが動作するようにREST APIを無効化する方法
  • 記事公開:2019/04/18
  • 最終更新:2019/05/04

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

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

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

WordPressのカスタマイズはお任せください。

WordPressのカスタマイズを格安で代行いたします。ご希望のカスタマイズがあればご相談ください。

最近関わった案件で、プラグインを導入しても正常に動作しないケースに出会いました。
例えば、「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を無効化する方法をまとめてみました。

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

著者:takaya kondo

岡山在住のWebディレクターです。Wordpressを使ったWEBサイト制作を中心に10年間ほど活動させていただいています。

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

Wordpressサイトのカスタマイズで
お困りではありませんか?

あなたのWordpressサイトを、ご希望に沿ってカスタマイズいたします。
次に該当する方は、お気軽にご相談下さい。

  • Wordpressサイトをカスタマイズしたいが、やり方が分からないで困っている。カスタマイズの知識が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしたいが、自分でカスタマイズする暇がない。カスタマイズが得意な人に丸投げしたい。
  • Wordpressサイトをカスタマイズしてみたが、上手くカスタマイズできなかった。カスタマイズ経験が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしてみたら、バグが発生して困っている。正常に動作するように正しくカスタマイズしてほしい。

一つでも該当する方は、以下のリンクからチェックしてみてください。

詳細を確認する

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

  • 2019/05/04

    WordPress管理画面の投稿一覧から項目「作成者」を削除する方法

    WordPress管理画面の投稿一覧から項目「作成者」を削除する方法を解説します。表示オプションからも「作者名」の項目を削除する方法です。5分程度でマスターできますので、興味のある方は参考にしてください。 記事を読む

  • 2019/05/19

    【WordPress】ユーザーの総数を表示する方法

    WordPressで管理しているユーザーの総数を表示する方法をご紹介します。複数の人間で運営している場合などで、何人で運営しているかを表示したいときなどに使えるカスタマイズです。参考にしてください。 記事を読む

  • 2019/03/06

    WordPressに埋め込んだYOUTUBE動画をレスポンシブに対応させる方法

    サイト内に埋め込んだYOUTUBE動画をレスポンシブに対応させる方法をご紹介します。スマホでサイトを観覧した時でも、もうYOUTUBE動画が画面からはみ出すことはありません。このカスタマイズは3分間でマスターできます! 記事を読む

  • 2019/05/04

    【WordPress】1分でSVGファイルをアップロードできるようにする方法

    WordPressのアップローダーからSVGファイルをアップロードできるようにする方法をご紹介します。コピペだけでカスタマイズ可能ですので、作業時間は1分程度です。参考になさってください。 記事を読む

  • 2019/05/04

    ビジュアルリッチエディターを非表示にする方法

    WordPressのビジュアルリッチエディターを非表示にする方法をご紹介します。テキストエディターしか使わない方、参考にしてください。 記事を読む

コメントを残す

(必須)

CAPTCHA