WordPressの記事を投稿していて突然「更新に失敗しました。返答が正しいJSONレスポンスではありません。」と記事投稿画面に表示されて一時保存すらできなくなる場合があります。
このJSONレスポンスエラーが発生すると記事の投稿や保存が一切できません。編集途中でも保存できないためかなり厄介です。しかも編集画面の上にちらっと出現するので気が付きにくい!気づかないでずっと更新してしまっている人もいあるかもしれませんね。(僕がそうでした)
JSONレスポンスエラーの理由はいくつかありますが、WordPress自体をいじらずこれまで問題なかったのに突然表示された人はもしかしたら書いてはいけない文字を書いてしまってるかもしれません。もしくは何かしら更新作業を行った際のパーマリンクのズレです。
目次
気づかずにHTMLタグや
システムに関わる文字列を書いてしまっている
WEBページはHTMLタグで書かれています。WordPressもPHPプログラミングで作られているものの最終的に書き出されたページはHTMLで表示されています。
このHTMLタグとは<p>テキスト</p>のようなものを指します。別にHTMLタグを書いたつもりがなくても実は存在しないHTMLタグが偶然できてWordPressが記事更新を弾いてしまう場合があります。HTMLタグではなくてもただの<だけでもエラーになる場合があります。
これは使っているサーバーで自動でエスケープ処理してくれるかで変わりますし、ブロックエディタで書いているのかクラシックエディタで書いているのか。そして記事投稿に関わるプラグインでエラーの出る出ないが変わってきます。
JSONレスポンスでよくあるエラー原因と対策
パーマリンクが変になっている
- WordPressのアップデート
- プラグインの追加/アップデート
- 管理画面設定のパーマリンクが変になったり間違っている
- functions.phpのカスタム投稿のスラグを重複してしまっている
パーマリンクがおかしくなるとJSONレスポンスエラーが発生します。管理画面では投稿画面を開けるけど書いた記事を投稿/保存するための場所が迷子になっている状態です。記事の投稿、または更新するときになって始めて気が付きます。
考えにくいですが特定のWordPressアップデートのタイミングでパーマリンクまで影響が出ている可能性があります。他に可能性が高いのはプラグインの追加です。記事そのものに影響を与えるプラグインの場合は注意しましょう。
対策としては管理画面の「設定>パーマリンク」を開いて更新してください。これだけでパーマリンクが再設定されてエラーが無くなる場合があります。
またカスタム投稿を利用している場合はテーマ改修中にまれにパーマリンクがずれることがあります。カスタム投稿のスラグをWordPressが予約済みであったり重複してしまっている箇所はないでしょうか。カスタム投稿を増やすために使っているプラグインの設定、またはfunctions.phpを見直してみましょう。
管理画面>設定>パーマリンクで設定を間違っている
WordPressの各記事のURLは好きに変更できます。このURLをWordPressではパーマリンクを呼びます。パーマリンクを変更する場合は管理画面の「設定>パーマリンク」で行えます。
パーマリンク設定に「カスタム構造」があり自由に変更できるのですが、この設定をありえない状態にするとJSONレスポンスエラーが発生します。具体的に言うと「投稿全てが同じURLになってしまう状態」で記載しているとエラーになります。
カスタム構造の末尾は必ず「%post_id%」か「%postname%」を入れて記事毎に異なるURLになるようにしてください。もし「%year%/%monthnum%/%day%」としていると同じURLが存在してしまう可能性が非常に高いです。これは実際にクライアントがいじってエラーを出すようになってしまう事案がありました。
パーマリンクの意味がわからない場合は初期設定からいじらないようにしましょう。個人的には「%post_id%」だけで良いと思いますが。
レンタルサーバー側のWAFで無効な記述をシャットしている
レンタルサーバーによくWAFが設定されています。悪意ある人からの攻撃を防ぐ機能ですが、時には利用者にとって都合の悪いことも起こります。もしレンタルサーバーでWAFがオンになっていれば一度切ってみてください。それでエラーが解消された場合はWAFで何か制限をかけている部分があるはずです。
【ブロックエディタ】テーブル組の中でテキストを何箇所かハイライトでカラー変更する
たったこれだけのことでJSONレスポンスエラーになることを確認したこともあります。ハイライトカラーを入れると<mark>タグで囲まれるのですが、これがテーブルの中に何個かあるとサーバーのWAFがガードしていたようです。ちなみに利用しているサーバーはConoha WINGです。
<で始まり>で終わってしまっている範囲がある
WordPressのバージョンや使っているサーバー、ブロック/クラシックエディタを使っているかで変わってきます。また、functions.phpなどで自動整形をいじってしまっている場合にも注意が必要です。
まずはJSONレスポンスエラーが発生しているページで<〜>となってしまっている箇所がないか探してみましょう。ビジュアル編集ではわからない場合もあるのでHTML編集でも確認が必要です。
ショートコードを書いてしまっている
WordPressには便利な機能でショートコードと呼ばれるものがあります。これはプラグイン機能やfunctions.phpで独自に登録した情報を[コード名]と記述するだけで表示してくれるものです。非常に便利なのですが[文字]がショートコードとしてご認識されている場合があります。[]を使っていないか記事内を読み直してみましょう。
シングルクォーテーションを使っている
'
の事です。これもプログラム等で大きな意味を持つ記号なので2つに挟まれていたりするとエラーになる場合があります。'
が原因の場合はダブルクォーテーション "
に書き換えてみましょう。
レンタルサーバーでエスケープ処理が変わる
基本的にHTML内で<>
などHTMLタグやスクリプトに影響がある文字は書けないのですが、サーバーによってはエスケープ処理をしてくれる場合があります。エスケープ処理をしてくれないサーバーの場合は<>
は<>
と記述する必要があります。エスケープ処理をしてくれるサーバーは<>
とそのまま投稿画面に書けます。
サーバーを使い始めた時の仕様に合わせれば良いのですが、もしサーバーを引っ越ししたり、仮想サーバーから本番サーバーに移設した時にエラーが出るならエスケープ処理がどうなっているのか調べて見てみましょう。
最後に。
JSONレスポンスエラーの原因は記事保存ができないから
色々書いていますが、共通しているのは記事を保存できないからJSONレスポンスエラーが発生します。記事を保存できない原因はパーマリンク設定や記事にシステムに関わるような文字を書いてしまっているからになります。
このJSONレスポンスエラーの原因は環境によって違います。まずは上記に書かれていることを調べてみてください。