WordPressショートコード作成方法【基本の考え方とサンプル】

ショートコードを登録すると、エディター上でいつでも何度でも呼び出すことができるようになる。出力するタイミングが要。ショートコードを作成しながら基本の考え方を学ぶ。

ショートコードのしくみ

ショートコードとは、あらかじめ登録しておいたコードをエディター画面でいつでも好きなタイミングで呼び出すことができる機能のことである。

エディター画面ではPHP入力を行えないので、PHP入力を行いたいときもショートコードの出番である。

ショートコード置換のタイミング

ショートコードは、投稿を呼び出す前のタイミングで、[]で囲まれた呼び出し文を置換する。

投稿の内容を表示している時に処理されるのではなく、出力の準備をしているタイミングで実行される。

関数の中ではechoせずに、内容をreturnするようにする。そうしなければ意図しないタイミングでショートコードが実行されてしまう。

ショートコードを作成する

テキストを出力するショートコードを作成する場合。

コードを記述

functions.phpにショートコード化したいコードを記述する。

// ショートコードの基本形
function my_sc_test() {
  $html = "<h3>ショートコード作成例</h3>";
  $html .= '<p>';
  $html .= 'テスト';
  $html .= '</p>';
  return $html;
}
add_shortcode('my-sc-test', 'my_sc_test');
PHP

7行目でreturnしていると、想定通りに動作する。しかし、次のような良くない記述例もあります。

// ショートコードの良くない記述例
// 8行目でechoしてしまっている
function my_sc_test() {
  $html = "<h3>ショートコード作成例</h3>";
  $html .= '<p>';
  $html .= 'テスト';
  $html .= '</p>';
  echo $html; // echo している
}
add_shortcode('my-sc-test', 'my_sc_test');
PHP
<?php
// ショートコードの良くない記述例
// 5~6行目でその場で出力してしまっている
function my_sc_test() {
?>
  <h3>ショートコード作成例</h3>  <!--その場で出力している -->
  <p>テスト</p>
<?php
}
add_shortcode('my-sc-test', 'my_sc_test');
PHP

正しい方法はバッファを返すこと

バッファリング関数の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');
PHP

一度出力バッファに出力内容を取得して、最後にバッファを返している。

ob_start()

出力のバッファリングを有効にする(ヘッダ以外の) スクリプトからの出力は実際には行われず、 代わりに内部バッファに保存される

ob_get_clean()

現在のバッファの内容を取得し、出力バッファを削除するob_get_contents() および ob_end_clean() を同時に実行するのと同じ

関数の解説

// ショートコード作成の雛形
//[my_shortcode]を作成する場合
function my_shortcode() {
  return "テスト";
}
add_shortcode('test', 'my_shortcode');
PHP

ショートコード作成では、add_shortcodeという関数を使用する。

add_shortcode( $tag , $func );

$tagショートコードにする文字列
$funcショートコードが出現した場所で呼び出す関数

$tagはショートコードを呼び出すときのテキスト[$tag]に、$funcはショートコードを呼び出す関数になる。