WordPressのショートコードの中で、ショートコードを記述しても、内部にあるショートコードは実行されずそのまま表示される場合があります。
エディターで次のような記載を行なった場合です。
[foo] [bar] [/foo]
これを解決するには、次の2つの方法があります。
- 呼び出しもとのショートコードで
do_shortcode()
関数を使用する - プラグイン「Outerbridge Nested Shortcodes」を利用する
WordPressでショートコードを入れ子にして実行する2つの方法
2つのショートコード
[ul]
[li]
を以下のように定義した場合に
add_shortcode("ul", "ul_func"); function ul_func($atts, $content = null) { return '<ul>'. $content .'</ul>'; } add_shortcode("li", "li_func"); function li_func($atts, $content = null) { return '<ul>'. $content .'</ul>'; }
エディターで次の記載を行うと
[ul] [li]アイテム1[/li] [li]アイテム2[/li] [li]アイテム3[/li] [/ul]
HTML上では、次のような出力になってしまいます。
<ul> [li]アイテム1[/li] [li]アイテム2[/li] [li]アイテム3[/li] </ul>
しかし、次のようなHTML出力を期待しているはずです。
<ul> <li>アイテム1<li> <li>アイテム2<li> <li>アイテム3<li> </ul>
これを修正する2つの方法を解説します。
①呼び出しもとのショートコードでdo_shortcode()
関数を使用する
呼び出しもとのショートコードの$content
に対して、do_shortcode()
関数を使用します。
今回の例では、[li]
を呼び出している[ul]
の$content
に、do_shortcode()
関数を使用します。
add_shortcode("ul", "ul_func"); function ul_func($atts, $content = null) { return '<ul>'. do_shortcode($content) .'</ul>'; } add_shortcode("li", "li_func"); function li_func($atts, $content = null) { return '<ul>'. $content .'</ul>'; }
②プラグイン「Outerbridge Nested Shortcodes」を利用する
「Outerbridge Nested Shortcodes」の使い方は簡単です。インストールし、有効化するだけです。
特に難しい設定・操作はありません。