template_redirectが便利
目次
WordPressのアクションフックでtemplate_redirectというものがある。タイミングはページを表示する直前で、よく利用するwp_headなどよりも若干早い。
- wp
- template_redirect
- get_header
- wp_head
- wp_enqueue_scripts
- wp_print_styles
- wp_print_scripts
投稿データは取得できており、投稿内容に応じて後の処理を分岐させることができる。
個人的な使い方
例えば表示ページの中に特定のタグやクラスが含まれるかを判別し、存在するならば特定のスクリプトコードやスタイルシートを読み込むといったことが可能。このブログも特定のコードが出てきたときのみ、必要なJavascriptとCSSを読み込むようにしている。以下は必要分のみ簡単に抜き出したコード。
// グローバルなフラグ
var $my_flag = false;
// 記事の中に特定のタグがあるか判別する
function my_template_redirect() {
global $my_flag;
$queried = get_queried_object();
if ( is_single() ) {
$cont = $queried->post_content;
$ptn = //"何かしらの正規表現";
if ( preg_match($ptn, $cont) ) {
$my_flag = true;
}
}
}
add_action( 'template_redirect', 'my_template_redirect' );
// JavascriptとCSSの読み込み
function my_load() {
global $my_flag;
if ( !is_admin() ) {
// 個別ページでフラグがTRUEならコードを読み込む
if ( is_single() && $my_flag ) {
wp_enqueue_style( 'xxx-css', get_template_directory_uri() . '/css/xxx.css');
wp_enqueue_script( 'xxx-js', get_template_directory_uri() . '/js/xxx.js');
}
}
}
add_action('wp_enqueue_scripts', 'my_load', 1);
こうすることで不要な外部ファイルを読み込まないようにして、HTTPリクエストの数を減らすことができる。要はデータベース処理のように、必要なときに必要な分だけ取ってくるという感じで使える。ただし、正規表現のため負荷はかかる。1000文字程度の記事だとほとんど変わらないけれども、あまりにも長文で解読に負荷がかかりすぎるものの場合は、素直に外部ファイルをロードした方がいいかもしれない。