Wordressでショートコードを自作して、そのショートコードを利用してる投稿で保存したら、
「返答が正しい JSON レスポンスではありません。」と出て正しく保存できない状態になった。
解決まで時間がかかったので、備忘録的に載せとく
やった事
こんな感じにショートコードを作った。
管理画面
ソースはこんな感じ
function hogehogeShortCodeController() { require_once(dirname(__file__) . '/view/hoge.php'); } add_shortcode('hogehoge', 'hogehogeShortCodeController');
<div>hogehoge</div>
ソースの解説?
functions.phpをhtmlで汚したくなかったので、
viewというディレクトリーを作って、その中にhtmlが書かれてるphpファイルを作った。
いにしえのphperはよくやる手だと思う。
これで、表題のようなエラーになる訳です。
解決方法
そもそもWordpressのショートコードは、
「関数内でhtmlを表示するな。returnでhtmlを返せ。」
という物らしい。
何年もWordpressの仕事やってたけど知らなかったよwww
という事でrequire_onceしてきたphpファイルの中のhtmlを変数の中に物こめれば良いんだね。
という事でob_start()
を利用して、htmlを変数にぶち込めるようにした。
function hogehogeShortCodeController() { ob_start(); require_once(dirname(__file__) . '/view/hoge.php'); $html = ob_get_contents(); ob_end_clean(); return $html; } add_shortcode('hogehoge', 'hogehogeShortCodeController');
https://www.php.net/manual/ja/function.ob-start.php
これで保存できるようになり、画面でも正しく動作した。