【WordPress】投稿画面でPHPファイルを読み込んでみよう!引数も渡せるよ!

投稿ページ、固定ページでもPHPコードを実行できたら便利だと思いませんか?

そんな時はショートコードでPHPファイルを読み込みましょう。
もちろん引数も渡せるので投稿の自由度があがりますよ!

今回のコードはこちらです。

function my_shortcode($params = array())
{
    extract(shortcode_atts(array(
    'file' => 'default',
    'date' => 'default'
  ), $params));

	ob_start();
    include(get_theme_root() . '/' . get_template() . "/$file.php");
    return ob_get_clean();
}
add_shortcode('myphp', 'my_shortcode');

使い方は、上記の例であれば、

[myphp file="呼び出すファイル名" date="呼び出すファイルに渡す引数"]

となります。

では解説です。

解説

$paramsはショートコードの引数で、中身は配列で渡されます。
中身は

array(
  'file' => '呼び出すファイル名',
  'date' => '呼び出すファイルに渡す引数'
)

となっています。

まず、shortcode_atts()でショートコードの引数として取るキーを指定します。

shortcode_atts()は第2引数の配列を第1引数の配列に書き込む関数です。
同じキーがあれば上書きし、なければ第1引数の配列の内容となります。
第2引数のキーが第1引数に存在しない場合、それは書き込まれません。

例えばショートコードで

[myphp file="呼び出すファイル名" test="12345"]

とした場合、$paramsの中身は

array(
  'file' => '呼び出すファイル名',
  'test' => '12345'
)

ですが、上記のshortcode_atts()を通すと

array(
  'file' => '呼び出すファイル名',
  'date' => 'default'
)

と書き換わり、指定していないtestというキーは削除されます。

つまり無効なキーを除外してくれるわけですね。

extract()は配列から変数を作る関数です。
配列のキーを変数名に、値を変数の値に変換します。

上記の例では$file$date変数が作られ、値はそれぞれ‘呼び出すファイル名’,
‘呼び出すファイルに渡す引数’となります。

なお、既存の変数名が存在した場合の対処法を第2引数で指定できます。
デフォルトでは上書き設定になっています。
スキップしたりプレフィックスをつけたりすることもできるので、状況により指定してください。

次に、指定したPHPファイルをincludeします。
先程作った変数$fileをパスと結合してinclude()関数で読み込みます。

ここで注意です。

include()関数は、読み込んだところで処理されます。
しかし、今はショートコードを読み込んだところで処理して欲しいのです。
なので、一旦処理を棚上げしておきます。
そのためのob_start()関数です。

これは標準出力を出力せずにバッファしてくれる機能をもっています。
これによって一旦出力をとめ、include終了後にob_get_clean()でバッファを出力し、バッファの内容を削除してあげます。
こうすることで、読み込んだファイルが正常に処理されます。

add_shortcode()はショートコードを登録する関数です。
第1引数にショートコードタグ名を、第2引数に実行する関数名を指定します。

これでショートコードの作成は終了です。

ショートコードの引数を読み込んだPHPファイルで使う場合ですが、特に受け渡し等をすることなくそのまま使えます。
include()した場合、呼び出し側と呼び出された側のスコープ範囲は同じになるからです。

$date変数はそのまま読み込んだファイルの中で$dateとして他の処理に使えるのです。

終わりに

以上、ショートコードを使ってPHPファイルを読み込む方法でした。

私はこのショートコードを使って実績登録用や結果表示用のファイルを読み込み、dateで日付を指定してデータベースにアクセスしています。
テンプレートファイルに書き込むまでもない処理を別ファイルで用意して気軽に動作確認も出来るので便利です。

使い方次第でブログ作成が楽になるのではないかと思いますので、一助としてみてください。

それではよいWordPressライフを!

コメントを残す

名前、メールアドレスは任意です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。