ショートコードだって get_template_part()したい

WordPressのショートコードはHTMLを出力(echo)ではなく、返す(return)ところが要点だ。
HTMLをゴニョゴニョ生成してreturnする。とはいうものの投稿一覧を表示する場合に通常はget_template_part()でよいところ、ショートコードでこれを呼び出すとその場で内容が出力されてしまう。似たコードをfunctions.phpに書いてreturn せねばならないのか?面倒だしモヤモヤする。

なんとかショートコードでget_template_part()を使うことはできないものか?横着な私は考えた。

shortcode

調べるとob_start()を使うとよいことがわかった。出力をバッファリングするPHPの関数だ。そういうのもあるのか!PHPあまり知らなかった。

ここでは[my_pickup]というショートコードを用意し、アイキャッチを持つ投稿をランダムに3つ表示してみる。

ob_start()は、これより後の出力をバッファリングする。get_template_part ()を使っても出力されずバッファにたまる。ob_get_clean() はバッファされている内容を取得し、バッファを削除する。ショートコードではこの内容をreturn すればよい。

オーソドックスな手法らしく、検索するとすぐに出てくる。いったいどこにバッファされているのか?私は変数やメモリも用意してないのに、PHPとはそういったものなのか…
面倒に感じるときこそチャンス!手を抜くためにいろいろやってみるのだ。

コメントを残す

メールアドレスが公開されることはありません。