ショートコードを登録すると、エディター上でいつでも何度でも呼び出すことができるようになる。出力するタイミングが要。ショートコードを作成しながら基本の考え方を学ぶ。
ショートコードのしくみ
ショートコードとは、あらかじめ登録しておいたコードをエディター画面でいつでも好きなタイミングで呼び出すことができる機能のことである。
エディター画面ではPHP入力を行えないので、PHP入力を行いたいときもショートコードの出番である。
ショートコード置換のタイミング
ショートコードは、投稿を呼び出す前のタイミングで、[]
で囲まれた呼び出し文を置換する。
投稿の内容を表示している時に処理されるのではなく、出力の準備をしているタイミングで実行される。
関数の中ではecho
せずに、内容をreturn
するようにする。そうしなければ意図しないタイミングでショートコードが実行されてしまう。
ショートコードを作成する①
テキストを出力するショートコードを作成する場合。
コードを記述
functions.phpにショートコード化したいコードを記述する。
// ショートコード[my-sc-test]
function my_sc_test() {
$html = "<h3>ショートコード作成例</h3>";
$html .= '<p>';
$html .= 'テスト';
$html .= '</p>';
return $html;
}
add_shortcode('my-sc-test', 'my_sc_test');
7行目でreturn
していると、想定通りに動作する。
だめな例
<?php
// ショートコード[my-sc-test]
function my_sc_test() {
$html = "<h3>ショートコード作成例</h3>";
$html .= '<p>';
$html .= 'テスト';
$html .= '</p>';
echo $html; // echo している
}
add_shortcode('my-sc-test', 'my_sc_test');
8行目でecho
してしまっている良くない例。
<?php
// ショートコード[my-sc-test]
function my_sc_test() {
?>
<h3>ショートコード作成例</h3> <!--その場で出力している -->
<p>テスト</p>
<?php
}
add_shortcode('my-sc-test', 'my_sc_test');
5~6行目でその場で出力してしまっている良くない例。
正しい方法はバッファを返すこと
バッファリング関数のob_start()
とob_get_clean()
の使用が望ましい。
<?php
// ショートコード[my-sc-test]
function my_sc_test() {
ob_start(); // バッファ開始
?>
<h3>ショートコード作成例</h3>
<p>テスト</p>
<?php
return ob_get_clean(); // バッファを返す
}
add_shortcode('my-sc-test', 'my_sc_test');
一度出力バッファに出力内容を取得して、最後にバッファを返している。
- ob_start()
- 出力のバッファリングを有効にする
- (ヘッダ以外の) スクリプトからの出力は実際には行われず、 代わりに内部バッファに保存される
- ob_get_clean()
- 現在のバッファの内容を取得し、出力バッファを削除する
- ob_get_contents() および ob_end_clean() を同時に実行するのと同じ
関数の解説
// ショートコード作成の雛形
//[my_shortcode]を作成する場合
function my_shortcode() {
return "テスト";
}
add_shortcode('test', 'my_shortcode');
ショートコード作成では、add_shortcode
という関数を使用する。
add_shortcode( $tag , $func );
add_shortcodeに渡す引数は、$tag
と$func
がある。
$tag | ショートコードにする文字列 |
---|---|
$func | ショートコードが出現した場所で呼び出す関数 |
$tag
はショートコードを呼び出すときのテキスト[$tag]
に、$func
はショートコードを呼び出す関数になる。
Related Tags