WordPressで、投稿中や固定ページの本文から単発的に関数を呼び出したいとき便利なのがショートコードです。
標準的な用法では記述した場所に目的のコードが挿入されますが、既存のコードをヘッダ( wp_head )やフッタ( wp_footer )に出力したくなったのでメモ。
サイト全体のライブラリ読み込み順を変えたときなどに便利です。
ショートコードの基本的な書き方
ショートコードを利用するには、あらかじめ function.php などに呼び出し用のコードを作成しておきます。
【PHP】
<?php add_shortcode( $tag , $func ); ?>
[tag] によるコールバック関数が $func の形です。もちろん関数そのものも登録出来ます。適当な名前をつけた関数を用意してショートコードに設定しましょう。
【 function.php 】
function ozFunction1() {
return "
//
// ここに定型文を書く
//
";
}
add_shortcode('shortcode1', 'ozFunction1');
設定後に本文中で [shortcode1] と記述すると ozFunction1 関数が実行されて引用符で囲まれた中身が返ってきます。
ページごとに個別に呼び出したい機能があるとき便利です。
ショートコードの中身を本文以外に出力する
ここからが本題です。ショートコードの中身を <body> の外側に出力する方法です。
ショートコードの中身をヘッダ( wp_header )に出力
書式の都合でどうしても<head></head>内に書かなければならないときがあると思います。「個別記事で特定の関数をヘッダで動かしたい」というような場合です。
【 function.php 】
// ショートコードの中身をヘッダに送る
add_shortcode('shortcode2', 'ozFunction2');
function ozFunction2() {
function add_header() {
return "
";
}
add_action('wp_head', 'add_header', 10, 1);
}
[shortcode2] と書くと登録した中身がヘッダに送られます。あらやだ便利。ちなみに add_action の仕様は以下の通りです。
add_action(アクション名, コールバック関数, プライオリティ, 追加の引数)
ショートコードの中身をフッタ( wp_footer )に出力
同様に「個別記事から特定の関数をフッタに送りたい」場合です。
【 function.php 】
// ショートコードの中身をフッタに送る
add_shortcode('shortcode3', 'ozFunction3');
function ozFunction3() {
function add_footer() {
return "
";
}
add_action('wp_head', 'add_footer', 10, 1);
}
この[shortcode3] で登録した中身がフッタに送られます。 add_action の挙動も同じです。
おわりに
…ということでショートコードをヘッダやフッタに出力するときの書き方でした。
話の発端は「既に各ページで利用してるショートコードが依存するライブラリ記載位置を変更したらショートコードの読み込み順も変える必要が出た」ことへの対処です。
本来的にはヘッダやフッタに書きたいことはカスタムフィールドを作り込む方がスマートなんだと思います。ただ、既に動いてるプログラムを変えるのも大変なので呼び出し順の変更で対応しました。
最初の設計って大事ですね…。(^^;
コメントをどうぞ(´ω`*)