WordPressのREST APIについて

WordPress

以前、WordPressのREST APIの記事を紹介させていただきましたが、今回は少し特殊なREST APIの使い方を紹介いたします。
お試しの場合はREST APIを利用するので、必ずバックアップを取ってから対応してください。

事前知識

WordPressのREST APIを編集すると、以下のような不具合や制限が生じる可能性があります

プラグインとテーマの機能制限

多くのプラグインやテーマがREST APIを利用してデータの取得や操作を行っています。REST APIを無効化すると、これらの機能が正常に動作しなくなる可能性があります。

ブロックエディタ(Gutenberg)の機能制限

WordPressのデフォルトのブロックエディタ(Gutenberg)はREST APIに依存しています。REST APIを無効化すると、ブロックエディタが正常に動作せず、古いクラシックエディタに戻さなければならないかもしれません。

カスタムAPIやフロントエンドアプリの機能停止

カスタムAPIエンドポイントや、フロントエンドでReactやVue.jsなどのJavaScriptフレームワークを使用している場合、これらがREST APIを利用していることが多いです。REST APIを無効化すると、これらのアプリケーションや機能も動作しなくなります。

モバイルアプリの連携問題

公式のWordPressモバイルアプリや他のモバイルアプリがREST APIを使用してサイトのデータを管理しています。REST APIを無効化すると、これらのアプリも正常に機能しなくなります。

統合と連携の問題

他のサービスやツール(例:Zapier、IFTTT、外部の分析ツールなど)と連携する場合、REST APIが使用されることが多いです。これらの連携が機能しなくなります。

セキュリティ更新やメンテナンスの影響

一部のセキュリティプラグインやメンテナンスツールはREST APIを使用して診断や修復を行います。これらのツールが正常に動作しなくなる可能性があります。

フィードバックやリアルタイムデータ

コメントシステムやリアルタイム更新機能など、一部のインタラクティブな機能はREST APIを使用していることがあります。これらの機能が利用できなくなります。

これらの点を考慮し、REST APIを無効化する必要がある場合は、具体的な影響を事前に確認し、代替手段を用意することが重要です。また、REST APIを無効化する代わりに、セキュリティ対策やアクセス制御を強化することも検討できます。

上記の点を踏まえて、WordPressのREST APIを無効化する必要がある場合は下記の方法をお試しください。
必ずバックアップを取ってから作業してください!

WordPressのREST APIを強制的に有効化する

// プラグインによるREST APIの無効化を無視して、強制的にREST APIを有効化する
add_filter('rest_authentication_errors', 'force_enable_rest_api', 99);

function force_enable_rest_api($access) {
    // すべてのエラーを削除してREST APIを有効化する
    return null;
}

フィルターフックの追加

 add_filter('rest_authentication_errors', 'force_enable_rest_api', 99);

rest_authentication_errors フィルターフックに force_enable_rest_api 関数を追加します。
優先度を99に設定することで、他のほとんどのフックよりも後に実行されます。

カスタム関数の定義

function force_enable_rest_api($access) {
    // すべてのエラーを削除してREST APIを有効化する
    return null;
}

この関数は、認証エラーの引数 $access を受け取り、常に null を返します。これにより、REST APIは認証エラーを無視し、常に有効になります。

使用方法

このコードをテーマの functions.php ファイルに追加することで、REST APIを強制的に有効化できます。

セキュリティリスク

認証エラーをすべて無視することにより、REST APIが常に公開されるため、セキュリティリスクが増大します。このコードを使用する際は、セキュリティ上のリスクを十分に理解し、必要に応じて追加のセキュリティ対策を講じることをお勧めします。

特定のプラグインのみREST APIを強制的に有効化する方法

特定のプラグインのみに強制的に有効化する方法もあります。
下記ソースは以前紹介したソースとは違うものになっておりますのでご注意ください。

// 特定のプラグインのみが有効な場合にREST APIを強制的に有効にする
add_filter('rest_authentication_errors', 'force_enable_rest_api_for_contact_form_7', 99);

function force_enable_rest_api_for_contact_form_7($access) {
    // Contact Form 7 プラグインが有効かどうかをチェック
    if (is_plugin_active('contact-form-7/wp-contact-form-7.php')) {
        // プラグインが有効ならすべてのエラーを削除してREST APIを有効化する
        return null;
    }

    // Contact Form 7 プラグインが無効ならREST APIを無効化する
    return new WP_Error('rest_disabled', __('The REST API on this site has been disabled.'), array('status' => rest_authorization_required_code()));
}

コードの概要

  • add_filter() 関数を使って、rest_authentication_errors フィルターに force_enable_rest_api_for_contact_form_7 関数をフックします。この関数は、REST API の認証エラーが発生した際に呼び出されます。
  • force_enable_rest_api_for_contact_form_7 関数は、引数 $access を受け取ります。この引数は、REST API のアクセス権限を示します。
  • 関数内で、is_plugin_active() 関数を使って、Contact Form 7 プラグインが有効かどうかを確認します。
  • もし Contact Form 7 プラグインが有効な場合、null を返して、すべてのエラーを削除し、REST API を有効化します。
  • もし Contact Form 7 プラグインが無効な場合、WP_Error オブジェクトを返して、REST API を無効化します。

複数のプラグインを制御したい場合

複数のプラグインを制御したい場合は、以前ご紹介させていただきましたので、そちらを参照ください。

まとめ

いかがでしたか?
今回は以前紹介させて頂いたwordpressのRESET APIとは別の方法で制御する記事を掲載させていただきました。
特に今回お伝えしたかったのは下記のフィルターフックです。

 add_filter('rest_authentication_errors', 'force_enable_rest_api', 99);

こちらを記載することにより、他のほとんどのフックよりも後に実行されるので、以前紹介した方法では出来なかった場合にお試しいただければと思います。

参考記事

タイトルとURLをコピーしました