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が肝

これらの関数を介さないと、ショートコード中に埋め込まれたショートコードはそのまま文字列として出力されるだけになります。

ショートコードを多く使う人でプラグインを使いたくない場合は上記のように自前で用意しておくと色々と管理面で楽ですね。

関連記事

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL