エラー例:更新に失敗しました。 返答が正しい JSON レスポンスではありません
WordPressでタイトルの中に<? ?>や<?= ?>を入れようとすると、次のようなエラーが発生することがあります。
「更新に失敗しました。 返答が正しい JSON レスポンスではありません」
エラーの原因
エラーの原因は、見出しにPHPの記述となる「<? ?>」や「<?= ?>」を挿入しようとしたことです。
他の記事に「.htaccess」を編集してどうのこうのという記述もありましたが、この場合はもっと簡単で手っ取り早い方法で修正することができます。
エラーの対処法
エラーの対処法は残念ながらありません。
コードとして認識されてしまうのがダメなので、実態参照を使えばいいのでは?と思うかもしれませんが、実態参照を使ってもエラーになります。(実態参照については後述)
暫定の対処法としては、以下の2つの方法があります。
大文字を使う
1つ目の解決案は大文字を使うことです。
例えば「<? ?>」の「<」を大文字の「<」にするなど、どれか1つ(あるいは複数)の文字を大文字にすれば、PHPのコードではなくなります。
実例
例えば以下のようにタイトルが「【タイトル】<? ?>」となりタグの構造となる文字列を含んでいる場合はエラーが発生します。
ここで冒頭の「<」と後ろの「>」を大文字に変更します。
「✓保存しました」と表示され、正しく保存されたことがわかります。
スペースを含める
2つ目の解決案はスペースを含めることです。
例えば「<? ?>」の「<」と「?」の間に半角スペース「 」を挟んで「< ? ?>」とします。本来意図したいものとは違いますが、それっぽくなります。
実例
例えば以下のようにタイトルが「【タイトル】<? ?>」となりタグの構造となる文字列を含んでいる場合はエラーが発生します。
ここで冒頭の「<」と「?」の間に半角スペースを挿入して「< ?」に変更します。
「✓保存しました」と表示され、正しく保存されたことがわかります。
実態参照(エンティティ)とは何か?
「< >」を文字列として画面上にそのまま表示したいと思っても、HTMLの中にそのコードを記述すると、HTMLはタグだと認識してしまいます。
ビジュアルエディタを使って本文中に記述する場合は <div></div>といったように文字列として認識してくれますが、タイトルの場合はそうはいきません(現時点の仕様では)。
これを避けるために、HTMLではそれぞれの記号をHTMLタグではなく文字列として表示するための特別な記述を持っています。
その書き方のことを「実態参照」英語では「エンティティコード」(あるいは単にエンティティ)と呼びます。
例えば、小なり「<」であれば「<」と記述します。
大なり「>」であれば「>」と記述します。
実例:実態参照(エンティティ)は使えない
例えば以下のようにタイトルが「【タイトル】<? ?>」となりタグの構造となる文字列を含んでいる場合はエラーが発生します。
これを実態参照を使って記述すると以下のようになります。
依然としてエラーが発生してしまいます。