WordPressでショートコードを作る

ショートコードの基本形

本家に全部書いてあるので冗長ですが。
functions.phpに以下を書きます。

/* Short code */
function foobar_func( $atts ){
    return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

で、記事中に

[foobar]

というショートコードを追記します。すると「foo and bar」で出力されます。
ここまでは簡単。foobar_func()で返される値をadd_shortcode()というWordpress特有の関数でショートコードに

引数のあるショートコード

別にextract使う必要もないだろうと思いますが。

function hogeFunc($atts) {
    extract(shortcode_atts(array(
        'num' => 0,
    ), $atts));

    return $num * 2;
}
add_shortcode('hoge', 'hogeFunc');
[hoge num=100]

200が返ってくるという感じです。
文字列の場合も同様です。

function hogeFunc($atts) {
    extract(shortcode_atts(array(
        'string' => '',
    ), $atts));

    return $string;
}
add_shortcode('hoge', 'hogeFunc');
[hoge string="foobarbaz"]

foobarbazが表示されます。
引数はshortcode_atts()の配列に定義してゆけばいくつでも増やせます。

テンプレートを使う

ここでは引数にファイル名を指定しているのだけど、特にそれはなくとも内部のob_start()からのinclude()でテンプレートを呼び出せます。結果はob_get_clean()をreturnで返します。
コードが大変な量になるとか、そういうときに便利。もっとコードの量が多い場合はプラグインにした方がいいですよ。

function my_php_Include($params = array()) {
    extract(shortcode_atts(array('file' => ''), $params));
    ob_start();
    include(STYLESHEETPATH . "/inc/".$file.".php");
    return ob_get_clean();
}
add_shortcode('foobar', 'my_php_Include');

使うときは、

[foobar file="hoge"]

です。

Last update: 2018.02.23 (金)