WordPressでショートコードの中にショートコードを書けるようにする方法
WordPressのショートコード使っていますでしょうか?
ショートコードはビジュアルエディタのままで、コードを呼び出せるので 決まったコードを何度も使ったりする場合にはとても便利です
でもそんなショートコードにも弱点が有るのです。
その1 テンプレートではショートコードがそのままでは使えない
その2 ショートコードの中にショートコードを書くことが出来ない
両方共、弱点なので克服できます。今回はショートコードの中にショートコードを書けるようにする方法を紹介します
ショートコードの内にショートコードを書いても機能するようにする
ショートコードっていうのはfunctions.phpに予め呼び出すためのコードを書き込んで。ショートコードとして呼び出すもので。そのショートコードを呼び出すために設定したコードに少し手を加えることでショートコードの中にショートコードを書いても文字として処理されずにショートコードとして処理されるようになります
親のショートコードと子のショートコード
[親] [子]まるまるまる[/子] [/親]
こういった形で親のショートコードの中に子のショートコードがある状態だと、通常では親のショートコードだけ機能して、親のショートコードの中にある子のショートコードは、ただの文字列として表示されてしまいます
これを機能するようにするためには、親のショートコードの方に手を加えます。
functions.php 親のショートコードに一行加える
通常の囲い込み形式のショートコード
function single_rankings( $atts, $content = null ) { return '<section class="article-ranking">' . $content . '</section>'; } add_shortcode('ランキング', 'single_rankings');
ショートコードの中のショートコードを実行させるコード
$content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショート
囲い込みのコードにショートコードの中のショートコードを実行させるコードを加えた形式
function single_rankings( $atts, $content = null ) { $content = do_shortcode( shortcode_unautop( $content ) ); //ショートコードの中にショートコードがあっても実行するようにするコード return '<section class="article-ranking">' . $content . '</section>'; } add_shortcode('ランキング', 'single_rankings');
これでショートコードの中にショートコードを入れても実行出来るようになりました!
正確に言うと、ショートコードを実行させるというよりも文字列として処理されないように回避するといったほうが正確かな
また、別のやり方としては親のショートコードの中身を開始タグ用と、終了タグ用のショートコードに分けてやれば、それでも出来るはず
COMMENT