wordpressのショートコードの使い方

wordpressのショートコードは、phpの関数を含むプログラムを投稿画面から利用できるようにした仕組みのことです。投稿画面から使えるといっても、実際には各テーマのfunctions.phpかプラグインのファイルに使用するためのコードを入力しなければなりませんが、wordpressをカスタマイズする上では重宝するかも知れません。

wordpressでショートコードを使うための手順

wordpressでショートコードを使うには、まずfunctionsファイルにハンドラー関数を記述します。そしてこのショートコードハンドラーを呼び出すには、投稿画面の入力欄において左右のブラケットで挟んだ中に、ハンドラー関数で登録した名前を入力します。ブラケットとは角括弧のことで「[」と「]」のことです。

引数なし

もっとも単純なwordpressのショートコードです。以下がハンドラー関数になりますので、これをfunctionsかプラグインのファイルに記述します。「shortcodename」は投稿画面でブラケットの中に入力するもので、ショートコードを区別するための名称になります。この名称は他と被らなければ何でも構いません。

add_shortcode('shortcodename', function (){
return "wordpressのテスト";
});

投稿画面では以下のように入力して呼び出します。この例では「wordpressのテスト」と表示されます。

[shortcodename]

引数あり

以下を登録。上と同じく、nameの部分は好きな名称を使えます。ここでは「name」としています。

add_shortcode('name', function ($array){
return "$array[0]と$array[1]と$array[2]";
});

呼び出しは上の引数なしと異なり、ショートコードのブラケット内に半角区切りでA、B、Cを指定しています。この値は配列として処理され、添え字が数字の「Array ( [0] => A [1] => B [2] => C ) 」として格納されています。

[name A B C]

下の例は、添え字に該当する部分に数字以外を使った、いわゆる連想配列の形式です。連想配列ではこの添え字をキーと呼んでいます。これをfunctionsファイルに登録します。

add_shortcode('wordpress', function ($ary){
return "$ary[a]と$ary[b]と$ary[c]";
});

呼び出すには下のようにします。出力結果は、「aaとbbとcc」で、連想配列としては「Array ( [a] => aa [b] => bb [c] => cc ) 」のように格納されています。

[wordpress a=aa b=bb c=cc]

これらの違いは、連想配列でいうキーに該当する部分が数字か、それ以外の文字列か、という点です。配列は基本的にキーと値がセットになっていますが、数字の添え字の場合は、キーに該当する数字を省いて配列を作成することができます。そのため、一次元配列ともいわれますが、厳密には数字をキーにした二次元です。また、キーと値をセットにして入れ子にしたものを多次元配列と言います。

タグのように囲んだ文字列を処理する

このハンドラー関数は、第一引数に配列、第二引数にブラケットでタグのように挟んだ部分の文字列を取得します。引数の名称は、関数内で同一のものを使用すれば、何でも構いません。

下のサンプルでは、preg_replace_callback_array関数を利用していますが、処理自体は通常のphpで出来ることは何でもできます。wordpressの独自関数でも構いません。

add_shortcode('short', function ($hairetu_haitteru, $content){
$content = preg_replace_callback_array(
[
'`(プログラムで)(phpと)`su'=>function ($mtc){return preg_replace('`プログラム`', 'wordpressの仕組み', $mtc[1]).$mtc[2];},
'`(色々勉強しよう)`su'=>function ($mtc){return str_replace("勉強しよう", '遊ぼう', $mtc[1]);},
], $content);
return $content." $hairetu_haitteru[0]と$hairetu_haitteru[1]";
});

呼び出しは以下のようにしてみます。出力結果は、「wordpressの仕組みでphpとjqueryを使って色々遊ぼう! ショートコードとB」となりますが、「ショートコードとB」は、第一引数で受け取ったものです。そして、「wordpressの仕組みでphpとjqueryを使って色々遊ぼう!」が第二引数で受け取ったものとなります。

[short ショートコード B]プログラムでphpとjqueryを使って色々勉強しよう![/short]

優先順位を変える

wordpressのショートコードは標準だと、優先順位は指定できません。そのため、ワードプレス本体の何らかの処理によってショートコードがうまく動作しないことがあります。そんな時は、ワードプレスが用意しているthe_contentフックの中にショートコードのハンドラー関数を組み込みます。the_contentフックは記事本文をカスタマイズする時に多用するフックです。

分かりにくくなっていますが、add_filterの第三引数の「9」という数字が優先順位です。何も指定しなければ「10」で、ワードプレスが何らかの処理をする場合は、この付近ですので、大抵「9」にすればうまく動くようですね。状況によって異なるかも知れませんが、その場合は適宜対応して下さい。

add_shortcode( 'short', '__return_false' );
add_filter( 'the_content', function ( $the_co ) {
global $shortcode_tags;
$base = $shortcode_tags;
remove_all_shortcodes();
add_shortcode('short', function ($hi){
return "$hi[0]と$hi[1]";
});
$the_co = do_shortcode( $the_co );
$shortcode_tags = $base;
return $the_co;
}, 9);

呼び出しは以下の通り。出力結果は「ワープレとショートコード」。

[short wordpress ショートコード]

まとめ

ショートコードはテーマのテンプレートで処理するのが困難な時に役立ちます。基本的にワープレのカスタマイズはテーマのテンプレートかプラグインで対応するのが楽なのですが、細かい処理に関してはショートコードを使った方がプログラム的にすっきり記述できる場合も多いです。環境によって異なるかも知れませんが、状況に応じて最適な方法を選ぶのが良いでしょう。