WordPressのREST APIが動かない場合、パーマリンク設定を見直そう

WP REST APIが正常に動作しない

WordPress 4.7から導入されたREST APIについて、同APIを利用したプラグインを使用しようとしても正常に動作しないことがあります。この場合の修正方法を記載します。

  • WordPress 5.1.1
  • WordPress Popular Posts 4.2.2
  • KUSANAGI + Luxeritas

私の環境ではプラグイン「WordPress Popular Posts」をページ読み込み効率化のためajaxで利用しようとしたところ、人気記事リストが表示されなくなってしまいました。ajaxを無効化すると正常に表示されます。

原因としてはajax利用時にはREST APIを用いて記事情報を取得する仕組みとなっていますが、REST APIが正常に動作していないためでした。

APIが有効か確認する

まずは原因を切り分けるため以下をそれぞれ確認しました。

  1. サーバーが対応してるか
  2. .htaccessでREST APIを無効化していないか
  3. APIのエンドポイントを確認できるか

1.に関しては同じサーバーで運用していた別WordPressでは正常に動作していたため、問題ありません。2.に関しても.htaaccessを調査しましたが無効化する設定は入っていませんでした。

3.は以下のURLにアクセスすることで確認できます。「example.com」部分は確認したいWordPressサイトのURLに変更しましょう。私の環境ではトップページに転送されてしまい、JSONが確認できませんでした。

https://example.com/wp-json/wp/v2/

別WordPressとの違いは「example.com」か「example.example.com」の違いのみでした。問題の環境は後者で、サブドメインを設定していました。詳しい原理はわかりませんが、サブドメインを設定していると上記で言えば「wp-json」の部分がカテゴリー名などに誤認識されているのでしょうか。

https://example.example.com?rest_route=%2Fwp%2Fv2

上記URLで確認すると、期待するエンドポイントのJSONが出力されました。

解決方法

パーマリンク設定を変更することで解決しました。

# 基本
https://example.example.com/?p=123
↓
# カスタム構造
https://example.example.com/?p=%post_id%

パーマリンク設定を初期設定のまま使用していたのですが、上記のようにカスタム構造に設定し直すとJSONも正しく出力され、プラグインも動作するようになりました。納得いかない解決法ですが、これで直ります。

パーマリンク設定の変更で気になるのが既存記事のURLが変わってしまわないかですが、上記の設定方法であれば変更の前後でURLは変わらないので安心です。

参考元