
WordpPessには、一部のファイルを簡単に読み込むことができる「テンプレートインクルードタグ」が用意されていますが、個人的には include() 文のほうが都合が良いと感じています。
理解が浅く使い方が悪いのかもしれませんが、シングルページのサイドバー内で、if(in_category(ID)) による分岐が上手くいかなかったり 、その記事が属するカテゴリーの記事を表示する時、場合によっては get_the_category() を、全体で複数回使う必要がでてくるからです。
$post = $wp_query->post; による解決方法を知ったのはこの記事を投稿する直前…。
また、以下のような記事を読んだのがもう一つの大きな理由で、一回で済むことは複数回行わないようにした方が良さそうです。
中でも良く使用するbloginfoタグは、引数の項目をswitchで振り分けた後、項目がキャッシュにあるかをチェックし、無ければクエリを発行して取得するため、塵も積もれば重くなる。 WordPressのテンプレート高速化
- シングルページのタイトルにカテゴリー名を含めたい
- サイドバーにそのカテゴリーの新着記事10件を表示したい
- カテゴリーごとに特定のコンテンツを表示したい
- <?php?> の記述をなるべく減らしたい
という事を実現しつつ、なるべくシンプルなコードで負担をかけない方法を素人なりに考え、以下のようにカスタマイズしてみました。
single.php
複数回使う可能性がある「タイトル」と「カテゴリー情報」を変数に落とし、get_*** ではなく include でファイルを読み込む。
<?php $title = get_the_title(); $cat = get_the_category(); $cat = $cat[0]; include(TEMPLATEPATH . '/header.php'); ?> シングルページの中身 <?php include( TEMPLATEPATH . '/sidebar.php' ); include( TEMPLATEPATH . '/footer.php' ); ?>
header.php
先頭
シングルページに限らず、全てのページで利用頻度の高いものを(ブログタイトルやブログURL)を変数に落とす。ホームのURLには、スラッシュが付いてあった方が便利だと感じているので一応。
<?php
$blogurl = get_bloginfo('url') . '/';
$blogname = get_bloginfo('name');
echo '<?xml version="1.0" encoding="utf-8"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
タイトル部分の例
<?php
if (is_home()) {
echo '<title>' . $blogname . '</title>
<meta name="description" content="' . get_bloginfo('description') . '" />';
}
elseif (is_single()) {
echo '<title>' . $title . ' - ' . esc_attr($cat->cat_name) . ' : ' . $blogname . '</title>
<meta name="description" content="' . get_the_excerpt() . '" />';
}
else {
echo '<title>' . get_the_title() . ' - ' . $blogname . '</title>';
}
?>
シングルページでの出力結果 記事タイトル - カテゴリ名 : ブログ名
sidebar.php
その記事が属するカテゴリーの新着10件をリスト表示
すでにカテゴリー情報が配列されているので、$post = $wp_query->post や 改めてget_the_category() を使う必要はありません。
<div id="sidebar"><!-- ここから sidebar -->
<?php if ( is_single() ) { ?>
<h3><?php echo esc_attr($cat->cat_name); ?> : 最近の投稿</h3>
<ul>
<?php
$sideloop = new WP_Query('cat=' . $cat->cat_ID . '&posts_per_page=10');
while ($sideloop->have_posts()) : $sideloop->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; wp_reset_query(); ?>
</ul>
<?php } ?>
sidebar.php 内で、カテゴリーによる振り分け
カテ1で「はてブによる人気記事」、カテ3で「Twitterでのつぶやき」を表示、カテ4ではファイルを読み込み、その他のカテゴリーではAdSenseを表示。
<?php if ( in_category(1) ) { ?>
<div>はてな</div>
<?php } elseif ( in_category(3) ) { ?>
<div>Twitter</div>
<?php } elseif ( in_category(4) ) {
include(TEMPLATEPATH . '/myfile-4.php');
} else { ?>
<script>Google AdSense</script>
<?php } ?>
</div><!-- sidebar ここまで -->
その他に使えそうな場所
サーチフォーム
<form id="searchform" method="get" action="<?php echo $blogurl; ?>">
パンくず
<div class="navi">
<a href="<?php echo $blogurl; ?>">HOME</a> › <?php the_category(' , '); ?> › <?php echo $title; ?>
</div>
コピーライト表記
Copyright © <?php echo date('Y') . ' ' . $blogname; ?>
で、早くなった?
逆に複雑にしているだけのような気も…。get_***() を使った方がいいの? という疑問も残ったままですが、テンプレートがスッキリしてカスタマイズの悩みは減りました。










