WordPressのショートコードの中で別のショートコードを呼ぶことをできるのだろうか?
そう思った切っ掛けは、

広告などのショートコードを条件によって呼び分けたい、例えばカテゴリやタグなどを条件として呼び出すショートコードを切り替えられたら便利じゃないか
と思いました。
なぜなら、Cocoonには便利なショートコードが複数用意されていて、例えば、広告やランキングなどは管理画面で設定すればショートコードとして呼び出すことができるからです。
この記事では、Wordpressのショートコードの中で別のショートコードを呼ぶのは本当にできるのか?という疑問に答えたいと思います。
結論から言います。
WordPressのショートコードの中で別のショートコードを呼ぶのは出来ます。
ショーコードの中でショートコードを呼ぶ記述
PHPでショートコードを呼ぶときは、do_shortcodeで呼べばいいのは少し調べればすぐにわかります。
WordPressのショートコード内部では、echoをつけてdo_shortcodeすれば大丈夫です。
ただし、ob_start()とob_get_clean()が必要です。
大事なところなので繰り返します。
ショートコードをショートコード内で呼び出すポイント
- echo do_shortcode(‘[ショートコード1]’)
- ob_start()で出力をバッファ
- ob_get_clean()でバッファ出力&バッファクリア
add_shortcode( 'hogehoge', function () {
ob_start(); // バッファを有効に
if (条件判定){
echo do_shortcode('[ショートコード1]');
}else{
echo do_shortcode('[ショートコード2]');
}
return ob_get_clean();
} );
まとめ
WordPressのショートコード内でショートコードを呼び出すことができるようになると、ウィジェットエリアにショートコードを配置しておいて、記事のカテゴリやタグなどの条件で呼び出すショートコードを切り替えるといった使いかたも出来ます。
そうすると、ウィジェットエリアが一つでもショートコードを切り替えることができるのでとても捗ります。