arcanum_jp’s blog

おっさんの日記

ワードプレスのショートコード

ワードプレスを使っててショートコードを使ったので以下メモ

種類

自己完結ショートコードと、囲みショートコードがある。ワードプレス内のコンテンツに"[]"で囲むとショートコードとして認識される。


自己完結ショートコード
例:[hello] ー> ハロー

と言うように変換される。この場合、設定されたテーマにあるfunctions.phpに以下のように追加する。

function func_hello() {
    return 'ハロー';
}
add_shortcode('hello', 'func_hello');


投稿からなにか値を送りたい場合。例えば、名前と年齢など

例:[hello name='ジョージィ' age=14]

先ほどのショートコードの定義に引数を加えるだけ。引数に属性が連想配列で入ってくるみたい。

function func_hello($attrs) {
    return 'ハロー ' . $attrs['name'];
}
add_shortcode('hello', 'func_hello');
囲みショートコード

HTMLの

タグのように開始タグと終了タグでくくったところにコンテンツがある場合

例:[link]ここをクリック[/link]   -->  <a href="https://google.com">ここをクリック</a>

囲んだコンテンツは第2引数として渡ってくる

function func_link($attrs, $content) {
    return '<a href="http://google.com">' . $content . '</a>';
}
add_shortcode('link', 'func_link');

自己完結ショートコードと同様に第一引数には属性が渡ってくる

例:[link href='https://google.com']ここをクリック[/link]   -->  <a href="https://google.com">ここをクリック</a>
function func_link($attrs, $content) {
    return '<a href="' . $attrs['href'] . '">' . $content . '</a>';
}
add_shortcode('link', 'func_link');


囲みショートコードの中がショートコードだったらどうするか?$contentは単なる文字列なので、囲みショートコードで囲んだ文字列が飛んでくる。それをショートコードとして実行させたい場合はdo_shortcode()を使う。これで中身のショートコードも実行される。

例:[link href='https://google.com'][linklabel name='ここをクリック'][/link]   -->  <a href="https://google.com">ここをクリック</a>
function func_link($attrs, $content) {
    return '<a href="' . $attrs['href'] . '">' . do_shortcode($content) . '</a>';
}
add_shortcode('link', 'func_link');