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が返ってきてしまいました。
試した対処法
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を正しく動作させるためには非常に重要です。
同じような問題で困っている方は、ぜひこの方法を試してみてください!