WordPressで下書き保存時に「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」というエラーが出る原因について、よく出るエラーの割には原因が色々っぽいので、自分が当たってしまった原因をメモしておきます。
原因1 : and
文中にandという文字列が含まれていることが原因の一つでした。
これはWordPress日本語のサポートフォーラムでも挙げられており(リンク)投稿によると"SQLインジェクションからの防御"に関するものらしく、他にもand、or、true、false、function等が要注意であるようです。
対策
対処療法としてはan dのように文字列を千切るか、andのように全角にするかなどでしょうか?
ただ本文中に"and"入力不可というのはどう考えてもアレなので他のところに原因がありそうな気がしますが…
対処されている方はいるようで、いろいろやりよう自体はあるのかもしれません。
苦肉の策として"αnd"にしてみるなど。
【追記2024/10/28】
()でも同様のエラーが生じるようです。文字実体参照でも(と)で閉じられた際にエラーが発生します。
全角ではエラーにならないため、全角でも問題ない場合は全角をおすすめします。
原因2 : 「メディアとテキスト」機能
これについてはまだ詳しく調べられていないので詳細にどこが原因かわからないのですが、画像にテキストを併記できる「メディアとテキスト」機能でエラーが発生するようです。
設定等どこか触ってしまった部分があるかもしれませんが、コードビュー上では以下のようになっています。(※念のためコード内のid等一部変えています)
<!-- wp:media-text {"align":"center","mediaId":hoge,"mediaType":"image","mediaWidth":36,"verticalAlignment":"top","imageFill":false,"focalPoint":{"x":0.5,"y":0.5}} -->
<div class="wp-block-media-text is-stacked-on-mobile is-vertically-aligned-top" style="grid-template-columns:36% auto"><figure class="wp-block-media-text__media"><img src="https://hoge.jpg" alt="" class="wp-image-hoge size-full"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"align":"left","style":{"typography":{"fontSize":"18px"}}} -->
<p class="has-text-align-left" style="font-size:18px">hogehoge</p>
<!-- /wp:paragraph -->
これの
<!-- wp:media-text {"align":"center","mediaId":hoge,"mediaType":"image","mediaWidth":36,"verticalAlignment":"top","imageFill":false,"focalPoint":{"x":0.5,"y":0.5}} -->
部分がどうも悪さをしているようですが、、、
対策
「メディアとテキスト」機能を使わない、あるいは機能内のどこか設定を変える?
原因1の原因【2024/10/28追記】
どうやらブロックエディターで、ブロック内(コードエディター上ではコメントアウトされている部分)に"and"等の文字列を含むとエラーになるようです。
<!-- wp:paragraph -->
<p>andが利用不可な場合</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>ブロック内に"and"をいれるとJSONレスポンスエラーが生じる。</p>
<!-- /wp:paragraph -->
ひとまず"and"等の単語についてはこれで対処できそうですが、どうも()についてはこれでもなおエラーが生じる場合があります。
これの厄介なポイントは、たとえブロック内でも場合によってはエラーにならないなど、挙動が安定しないところ…
原因1の原因の原因?【2024/10/28追記】
ありえない見出しですみません。
このエラーは現在WordPressのプラグインの一つである「Custom Post Type UI」で作成した"カスタム投稿タイプ"での固定ページでのみ確認しているため、原因はそこかもしれません。
バージョンは1.15.1です。アップデート次第また挙動を確認します。
終わりに
とりあえず上2つに対処してエラーは出なくなりました。
根本的な対処ではないのでもう少し調べたいところです。対処法等ご存じの方はコメント等で教えていただけると幸いです…