関連記事
WordPressのショートコードの中にさらにショートコードを入れたい
ショートコード内で入れ子のショートコードを展開できるテンプレートを展開する関数を作ってみました。
ショートコードの中身は配列で管理しているので、
ショートコード用の関数を個別に何個も作る必要はありません。
functions.php
子テーマのfunctions.phpに以下のコードを記述します。
<?php
add_shortcode('template', 'template_shortcode');
function template_shortcode($args)
{
$templates = [
'template1' => [
'link' => '<a href="#">link</a>',
'list' => '<ul>
<li>1</li>
<li>2</li>
'
],
'template2' => [
'link' => '<a href="#">link2</a>',
'footer' => '<footer>
footer
</footer>
'
]
];
$attrs = shortcode_atts(['name' => '', 'type' => ''], $args);
if (!empty($templates['name'])) {
if (!empty($templates['name']['type'])) {
return do_shortcode(shortcode_unautop($templates[$attrs['name']['type']));
}
}
}
}
記事中にショートコードを埋め込む
[template name="template1" type="link"]
[template name="template2" type="link"]
と記入することで、それぞれHTMLタグが展開されます。
template2にはtemplate1の内容を展開して表示することが可能。
do_shortcodeとshortcode_unautopが肝
これらの関数を介さないとショートコード中に埋め込まれたショートコードはそのまま文字列として出力されるだけ。
ショートコードを多く使う人でプラグインを使いたくない場合は上記のように自前で用意しておくと色々と管理面で楽ですね。