WordPressでは「ショートコード」というものを利用して、記事内で任意のPHPコードを呼び出すことができます。
ショートコードを呼び出して使えるプラグインも多いので、存在だけ知っている人も多いかと思いますが、今回は、そのショートコードを自分で作成する方法をメモ。
例えば、当サイトで使用している内部リンク用のブログカードは、ショートコードを利用して呼び出しています。
↑これです。
ショートコードの作成・登録
任意のコードをショートコードしてつけるようにするための手順は、たった2ステップです。
- ショーコードで呼び出したいPHPコードを、関数としてfunctions.phpに定義する。
- 定義した関数を
add_shortcode()
を使ってショートコードとして登録する。
これだけ。
例:"ショートコードだよ"と表示するショートコードを作成・登録する
function shortcode_test(){
return "ショートコードだよ";
}
add_shortcode('sc_test', 'shortcode_test');
add_shortcode()
は第1引数に呼び出す時の名前(ショートコード名)、第2引数に呼び出したい関数を指定します。
上の例では、shortcode_test()
という関数を呼び出すために「sc_test」という名前を使うよ、としています。
登録したショートコードを投稿内で呼び出す
次は、先ほど作成・登録したショートコードを投稿エディタ内の任意の場所で呼び出す方法です。
方法は簡単、[ショートコード名]
と投稿内に記述するだけ。
もちろん、ビジュアルエディターで大丈夫です。(特にカスタマイズしてなければ、おそらくpタグの中に展開されます)。
記述された場所で、ショートコードの中身が実行されます。
例えば、先ほど登録しておいた「sc_test」という名前のショートコードを呼び出したい時は、好きな場所で[sc_test]
と記述します。
以下の「DEMOエリア」では、実際に、先ほど登録した「sc_test」というショートコードを呼び出しています。
ショートコードだよ
returnされた "ショートコードだよ" という文字列が表示されているはずです。簡単ですね!
注意点:表示したいテキストやHTMLソースはechoで出力せず、returnで返そう
先ほどの例では、文字列を呼び出すのにreturn
を使っていますね。
普通echo
じゃないの?と思った方もいるかもしれませんが、カスタムフィールドのテキストエディタ内に書いたショートコードなどはecho
を使用すると表示してほしい場所に文字列が表示されない場合があります。
投稿内容を呼び出す時の関数処理の順番が関係してるのだと思います。
文字列だけでなく、htmlを出力したい場合も同様にreturn
を使用してください。
ショートコードで引数を受け渡せるようにする方法
ショートコードの基本が分かったら、次は引数の受け渡しができるようにしてみましょう。
例として、「2つの数値を加算した結果を出力する」ショートコードを作成してみます。
2つの数値を加算した結果を出力するショートコードの作成・登録
function sc_addition($arg){
$result = $arg[0] + $arg[1];
return "計算結果は".$result."です。";
}
add_shortcode('addition', 'sc_addition');
「addition」という名前のショートコードを新しく登録してみました。$argsの挙動についてはあとで説明しますね。
この「addition」を使って、例えば 3+5 の計算結果を出力したい時は、次のように呼び出します。
エディタ内の任意の場所で
[addition 3 5]
これにより、「計算結果は8です。」という文字列が表示されます。
引数の受け渡しはどうなってるのか
実例を一つみてもらいましたが、「いやよくわからん。」とお思いの方は多いはず。もう少し丁寧に説明していきます。
引数の受け方
ショートコードでは引数の受け方が特殊で、
function ショートコード名($args) { /* ショートコードの中身 */ }
というように、引数が何個であろうと$args
という1つの変数で受け取ることができ、$args
は渡された引数の数に応じた長さの配列となります。($args
という変数の名前は自由です。)
引数の渡し方
ショートコードでは引数の渡し方がかなり自由になっています。
[ショートコード名 引数1 引数2 ... 引数n]
というように、スペース区切りで好きな数だけ引数を渡すことができます。
例:呼び出し側が [ショートコード名 5 10 太郎] とした時の受け取り側の$argsの中身
array (
0 => '5',
1 => '10',
2 => '太郎',
);
*数値も文字列として渡されていることに注意してください。
また、キーを付けて引数を渡すこともできます。
例:呼び出し側が [ショートコード名 name=太郎 age=20] とした時の受け取り側の$argsの中身
array (
'name' => '太郎',
'age' => '20',
);
再度additionの解説
[addition 3 5]
と呼び出された時、$args=['3', '5']
という配列として、引数の受け渡しがされるわけです。
なので、$arg[0] + $arg[1]
という形で受け渡された 3 + 5 が計算できたということです。('3' と '5' は文字列として渡されますが、演算時に自動キャストされて数値として処理されただけです。)
ちなみに、[addition 3 5 10 20]
のように引数を無駄に増やしてもエラーが出ることはなく、普通に$args=['3', '5','10','20']
となって渡されますが、もちろろん、計算結果は 3 + 5 の結果が返されます。
実際に引数の受け渡しを出力して確認してみよう
説明を読むよりも自分の手で実際に引数の受け渡しを体感してみましょう。
引数の中身を吐き出すだけのショートコードを作成しましたので、このショートコードに適当に引数を与えまくって呼び出しまくってみてください。
引数を吐き出すだけのショートコード「arg_dump」
//functions.phpにコピペ
function sc_arg_dump($arg){
return var_export($arg, true);
}
add_shortcode('arg_dump', 'sc_arg_dump');
[arg_dump 引数]
で呼び出して遊んでみてください。
* var_dump()をすると変なところに出力されるので、returnでvar_export()を返しています。