「カスタム投稿にDownloadManagerのショートコードを使ったらエラーを吐いた」
ちょっとテンパった
症状
以上をインストールした環境で、DownloadManagerでファイルを登録してショートコードを発行。
CPTUIで作ったカスタム投稿本文にショートコードを突っ込むと「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」と出て保存できない。
通常の投稿記事、固定ページではショートコードは普通に機能してるのにカスタム投稿だけが何故か通らない。
DownloadManagerはパスワードが掛けられるのが魅力的。
WP上でBasic認証混ぜると後がめんどくさそうだし。
なんとしても使えるようにしたい。
原因
CPTUI(カスタム投稿?) + ブロックエディター + ショートコードは食い合わせが悪い。
もっと言えば、
<!-- wp:paragraph --> <!-- /wp:paragraph --> <!-- wp:shortcode --> <!-- /wp:shortcode -->
こういうのが入ってる記事にショートコードをぶっこむとエラーを吐く。
カスタム投稿だけこの条件下にあると弾かれる。
理由はわからない。
【解決策1】ブロックエディタを使わない
記事内にコメントタグが一切無い状態を作れば保存できる。
だから、コードエディターでやるとか、クラシックの1ブロックだけにするとかで記事を書くことになる。
エディタの変更は他の編集画面にも反映されちゃって超絶めんどくさい、サイト管理者が複数いたら共有がめんどくさい、色々ほんとにめんどくさいので、だったら諦めようぜの気持ちが高まる。
【解決策2】カスタムフィールドに記載する
ショートコードとコメントタグが入ってる状態の本文が問題みたいで、カスタムフィールドにショートコードを入れてそっちで表示させるってのは大丈夫だった。
ショートコードをそのまま表示しても実行されない。
Advanced Custom Fieldsを入れてるのでそれ用の所作としてこんな感じで記載する。
echo apply_filters('the_content', get_post_meta($post->ID, 'カスタムフィールド名', true));
これで表示すれば、本文をブロックエディターで作成しても問題ない。
まとめ
プラグインとWP本体の食い合わせが悪いのか、プラグイン同士の干渉なのか、いじってても原因はよくわかんないままで終わった。
今回に関してはダウンロードリンクの位置が決まってるのでカスタムフィールドで済んだんだけど、そうでないケースも出てくるかもしれない。
そうしたら都度縛りを用意して、できないんですよごめんねをやってかないといけない。
まあダメなもんをどうにかしようって時間を掛けるより、そっちでやってったり、別のを探したほうがいいのかもしんないですね。
20221104追記:ひとつの解決方法
当時の再現ができないので明確な解決策になるか分からないけど、症状的に多分WAFによるセキュリティのアレだと思う。.htaccessへの記述でセキュリティ対象から除外する方法があるので、まずはそれを試してみるのが良い。
コメント
私も同様のトラブルに見舞われていて困っています。
①カスタムフィールド(ACF)の初期値に[ショートコードを記載]、カスタムフィール名:ビュー
②カスタム投稿にカスタムHTMLで
echo apply_filters(‘the_content’, get_post_meta($post->ID, ‘ビュー’, true));
としていますが、依然として、「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」と出てきます。
何か手順として変なところございましたら、教えてほしいです。
オリジナル投稿なら、ショートコードにコード記載しておわりなのにとほほです。
因みにですが、記事毎に閲覧数を記載しようとしています。よろしくお願いいたします。
コメントありがとうございます。
当記事を書いていたときには知らなかったのですが、「更新に失敗しました。 返答が正しい JSON レスポンスではありません。」の表示はサーバー側のセキュリティ(WAF)によるものである可能性があります。
原因がWAFだった場合の対策は以下の2つです。
①WAF自体を切る
②WAFから自分を除外する
①は切りっぱなしだと全面的にノーガードになって危ないので編集のたびに切り替えることになり、面倒です。
②は.htaccessに自分のIPを除外する内容を足すだけなので楽ですし、除外しっぱなしでもPCを乗っ取られない限りは安全かなという感じです。こちらの記事を参考にしてみてください。