wordpress4.1からadd_theme_support('title-tag')を使えばtitleタグが自動生成されますが、ちょっと使えないな〜と思うところがあります。(wordpress4.4では不具合も解消され使用する事にしました。)

使わない理由

それは、アーカイブの「年」のtitleタグを出力すると「Notice: Undefined index: 00 in 中略/wp-includes/locale.php on line 271」というエラーが出てしまいます。「Notice」レベルのエラーですが、私としてはあまりいい感じがしません。

エラーの出どころを解析したところ、wp_title関数内に不具合がありました。年の値しかないのに月の値を見に行っていてるのが原因でした。add_theme_support('title-tag')でも内部では、wp_titleを使用しています。

それともう一つの理由が、年月のタイトルが「10月 | 2015 | 」となり、ちょっとカッコ悪いかなと思っています。私としては、「2015年 10月 | 」と表示して欲しいところです。

そういう2つの理由でadd_theme_support('title-tag')は、使わない方でいこうと思います。年と月の時は自分で作成して、その他はwp_titleを使用しようと思います。以下が変更したソースになります。

header.phpに以下のように記述して、追加した関数を呼びます。


<title><?php my_title(); ?></title>

functions.phpに以下の関数を追加しました。


function my_title() {
	if (is_archive() && (is_year() || is_month())) {
		$my_year = get_post_time('Y');
		$str = $my_year .'年 ';
		if (is_month()) {
			$str .= (get_post_time('n') .'月 ');
		}
		$str .= ' | ' . get_bloginfo('name');
	} else {
		$str = wp_title('|', false, 'right') . get_bloginfo('name');
	}
	echo $str;
}