【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サイトのループに指定した間隔で広告を挿入する方法をご紹介しております。アフィリエイト広告などをループの中に埋め込みたいときに役立つカスタマイズです。コピペ用のコードもありますので、ぜひ参考にしてください。 記事を読む

  • 2019/05/04

    WordPressの抜粋で知っておくべき基本と3つのカスタマイズ

    WordPressの抜粋で知っておくべき基本と3つのカスタマイズをご紹介します。このコンテンツを読むだけで、WordPressの抜粋に関して、基本とよく使うカスタマイズをマスターすることができます。興味のあるあなたは、5分間だけこのコンテンツを見てください! 記事を読む

  • 2019/05/04

    テンプレ配布!WordPressの子テーマを7分で作成する方法

    Wordpressの子テーマを7分で作成する方法をご紹介します。子テーマのテンプレートを無料でプレゼント。初心者の方でも簡単に子テーマを導入することができます。参考にしてください。 記事を読む

  • 2019/05/05

    カスタムタクソノミーで初期タームを自動で設定する方法

    カスタムタクソノミーで初期タームを自動で設定する方法をご紹介いたします。タームを選択しなくても自動的に初期タームが設定されれば便利だと思いませんか?コピペと簡単なコード調整でできるカスタマイズです。 記事を読む

  • 2019/05/05

    WordPressに投稿した画像を自動的にpタグで囲ませない方法

    WordPressに投稿した画像を自動的にpタグで囲ませない方法をご紹介。WordPressに画像を投稿すると自動的にpタグで囲まれてしまうのですが、これを回避する方法をご紹介します。 記事を読む

コメントを残す

(必須)

CAPTCHA