ようこそのお運びで、厚く御礼申し上げます。
48日目です。囲み型のショートコードの続きです。その中にショートコードを書いてみます。
囲み型のショートコードのなかにショートコードを書いて、両方とも実行してみる
囲み型のショートコードAのなかに、ショートコードBを書いて、A,Bともに実行する
まず、ショートコードの入れ子を作ります。
両方のショートコードが実行され、表示側にはこう表示されます。
「囲み型ショートコード」の関数で再帰的にショートコードを実行
囲み型ショートコードとは以下のような状態のことをいいます。
[ショートコード名A]はじめてのしょーとこーど[/ショートコード名A]
今回は、挟み込んだこの文字列の中にショートコードを記入して
[ショートコード名A]はじめてのしょーとこーど[ショートコード名B][/ショートコード名A]
という状態にします。
まずは、function.phpに書いてみます。
では、function.phpに以下のコードを書きました。今回は2種類のコードを用意します。
まず、「はじめてショートコード・・・」で作ったショートコード[jugem]
function jugemStr($atts) { $str =<<<EOS {$count}じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうねるところにすむところ やぶらこうじのぶらこうじ ぱいぽ ぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだいのぽんぽこぴーの ぽんぽこなーの ちょうきゅうめいのちょうすけ EOS; return $str; } add_shortcode('jugem', 'jugemStr');
//########################## function strColorRedH3( $atts, $content = null ) { //$contentのなかにあるショートコードを「do_shortcode」で実行 $str = do_shortcode($content); //装飾処理 $val =<<<EOS <h3 style="color:red">{$str}</h3> EOS; return $val; } add_shortcode('mite', 'strColorRedH3');
この二つのコードを使います。
ポイントはどこ?
[jugem]のショートコードの説明は、前々回したのと同じなので省略します。
- ショートコード用の関数を作成
第1引数には$attsには「属性の配列」がはいります、第2引数の$contentには、囲まれた文字列が入ります。(※引数は順番が大事。)function strColorRedH3( $atts, $content = null ) { //$contentのなかにあるショートコードを「do_shortcode」で実行 $str = do_shortcode($content); //装飾処理 $val =<<<EOS <h3 style="color:red">{$str}</h3> EOS; return $val; }
- 今回は、$content(囲まれた文字列)内のショートコードを実行します。その場合は「do_shortcode()」関数を再帰的に実行します。
$str = do_shortcode($content);
- add_shortcodeをつかって、呼び出すショートコード名と呼び出す関数を設定する。
add_shortcode(‘ショートコード名’,'呼び出す関数’);
add_shortcode('mite', 'strColorRedH3');
- 後は記事の本文など、表示したい部分に記事本文内に”囲み型”のショートコードを記入します。
(記事本文内) [mite]ここをみて!!==>[jugem][/mite]
またテンプレートでもdo_shortcodeをつかって、ショートコードを記入することができます。
<?php echo do_shortcode('[mite]ここをみて!!==>[jugem][/mite]'); ?>
コードをプラグイン用のファイルにします
それではfunction.phpに書いたコードを消して、
「paka3_shortCodeSecond.php」というファイルを作成し、以下のコードを記入します(前回の修正)。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
※前回のコードを内部ショートコードを実行可能にしたプログラムです。
今回のまとめ
なんとなくショートコードを理解していたつもりでしたが、意外と使い方に幅があることに驚きました。使い勝手はよさそうですね。