WordPress API のレスポンスでなぜか HTML が返される(トップページにリダイレクトされる)

Wordpress
スポンサーリンク

WordPress REST API でHTMLが返ってしまう原因と対処法

はじめに

WordPress(以下、WP)でREST APIを使用する際に、通常JSONデータが返されるはずのエンドポイントから、なぜかHTMLが返ってしまうという問題に遭遇しました。

認証周りの設定ミスを疑いましたが、GETメソッドでAPIを叩いた場合でも同様にHTMLが返ってくる状況でした。

本記事では、この問題の原因と具体的な対処法について解説します。

発生した問題

WordPressのREST APIを使用して記事データを取得しようとした際に、意図したJSONデータではなくHTMLが返される現象が発生しました。

実行したAPIリクエスト

bash
curl -X GET http://example.com/wp-json/wp/v2/posts

通常、このAPIエンドポイントをGETメソッドで叩いた場合、認証なしでもJSONデータが返されるはずです。しかし、実際にはHTMLが返ってきてしまいました。

参考: WordPress REST API ドキュメント

試した対処法

1. REST APIが無効化されていないか確認

最初に疑ったのは、REST APIが何らかの理由で無効化されている可能性です。以下の点を確認しました。

– `functions.php` に `rest_api_init` を無効化するコードがないか
– `.htaccess` や `wp-config.php` にREST APIをブロックする設定がないか

しかし、特に問題は見つかりませんでした。

2. プラグインの影響を確認

次に、インストール済みのプラグインがREST APIの動作を妨げている可能性を疑いました。

– すべてのプラグインを一時的に無効化
– ひとつずつ有効化して再テスト

しかし、プラグインにも問題はありませんでした。

原因:パーマリンク設定

問題の原因は パーマリンク設定 にありました。

パーマリンク設定画像

WordPressでは、REST APIを利用する際にパーマリンク設定が影響を及ぼすことがあります。特に、パーマリンク設定が「基本」や「日付」などの 数字ベース の形式になっていると、REST APIのエンドポイントが適切に認識されず、HTMLが返されてしまうことがあります。

解決策

パーマリンク設定を 「投稿名」 に変更することで、問題は解決しました。

設定手順

1. WordPress管理画面にログイン
2. 設定パーマリンク を開く
3. 「投稿名」 を選択
4. 変更を保存 をクリック

この変更を行った後に、再度APIを叩いたところ、期待通りのJSONデータが返ってくるようになりました。

まとめ

WordPress REST API を利用する際に、意図しないHTMLが返ってくる場合は、パーマリンクの設定を確認してください。

この問題は意外と見落としがちですが、WP REST APIを正しく動作させるためには非常に重要です。

同じような問題で困っている方は、ぜひこの方法を試してみてください!

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