WordPress2.5のショートコードタグで遊んでみる

WordPress2.5の新機能であるショートコードタグですが、使い方がだんだんわかってきました。

基本的としては、phpで関数を記述(記述場所はテンプレートのfunctions.phpが適当)して、その関数をadd_shortcodeで登録しておけば、記事内にて、[タグ名 属性名="属性"]または[タグ名]…[/タグ名]といった形で、記事内にオリジナルの機能を持ったタグを追加できるというものです。
wp-includes/shortcodes.php内にサンプルの記述がありましたので、それを参考に遊びでタグを作ってみました。

// [randomface id="number"]
//idに対応した顔文字を表示(idなしの場合はランダム)
function randomface_func($atts) {
  extract(shortcode_atts(array(
    'id' => '0',
  ), $atts));
  $faces=array('', '(・∀・)', '(´∀`)', '(´・ω・`)',
    'Σ (゚Д゚;)', 'ヽ(;´Д`)ノ', '(*´Д`*)', '_| ̄|○');  
  if($id =='0'){
    return @$faces[rand(1, count($faces) -1)];
  } else {
    return @$faces[intval($id)];
  }
}
add_shortcode('randomface', 'randomface_func');

簡単に説明しますと、タグ内の属性はfunctionの引数として配列で渡されます。つまりこの場合は$atts['id']にnumberの値が入ります。次のextract…は配列を変数に展開するもので、これを通すと先ほどの属性値が$idで参照できるようになります。この中で使われているshortcode_attsですが、1番目の配列に2番の配列を上書きするような動作をするようで、これによってid属性が指定されなかった場合のデフォルト値を設定できるようになります。つまりこの場合はidが指定されていない場合は最初に指定された配列の値が有効になるので0になるといった具合です。
それ以降はテンプレート内とほぼ同様にテンプレートタグやphpが利用できます。ただしループ内でしか利用できないタグはうまく動かないものがあるようです。
こうして関数を定義したら、最後にadd_shortcode(’タグ名’,'呼び出される関数名’)と記述すれば、それ以降は記事内でタグが利用できるようになります。

上のタグを実際に記事内に入れるとこんな感じです。
(*´Д`*)

テンプレートタグとショートコードタグを組み合わせると、これまでの記事では難しかった動作を簡単に指定することができます。
例えば以下のようなショートコードを定義しておくと、シングルページでしか表示しない部分を投稿編集画面から簡単に指定することができます。上のものと違ってこれはタグで囲い込む形ですが、これもひな形として覚えてしまえばいいと思います。残念ながらショートコードタグは入れ子構造には対応していないみたいです。

// [issingle]content[/issingle]
// 個別記事ページの場合のみタグ内を表示します
function issingle_func($atts, $content='') {
  if(is_single()){
    return @$content;
  }
}
add_shortcode('issingle', 'issingle_func');

↓ここにシングルページでしか表示されないテキストがあります
ここはシングルページです

以下は上の応用で、GoogleMapsを読み込むJavaScriptですが、表示が重くなるのを避けるためシングルページのみで表示されるようになっています。

コメントする

トラックバックする

トラックバック用URL:


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。