連載第127回
2016年10月23日
date.php なんて知らなかった

 当サイトやフリフリミィの方で、フッターにまとめてあるカテゴリーやタブのキーワードで記事一覧を表示させると、ヘッダーの左側にそのカテゴリー名等が表示されてしまう…という不具合があり、以前から気になっていました。例えば上図のように「この世界の片隅に」というタグをクリックすると、<h1>で括った正常なタグ名はページ右上にきちんと表示されているのに、その一段下の左側にも表示されてしまう…。

 どんな状態になっているのかしらん、と状況を見てみると、通常の見出しタグの外側に突如出現しているような感じ(上図)。

 全く身に覚えがなかったけど何となく雰囲気として、以前アーカイブページ(archive.php)を作った時から生じているような気がする…もう1年ほど前のことになるけど(時間がなくて放置してました)。そこで試しに、その時にヘッダーの<h1>タイトル部分を分岐させるのに挿入した「php if(is_archive()」を削除してみたら、上の不具合表示が消えた。また入れたら出た。というわけで、どうもこの「php if(is_archive()」という条件分岐が怪しい。

 そこでいろいろ思いつく所を試してみて、その挙動から、どうやらカテゴリー(category.php)とタグ(tag.php)でまとめられる一覧表示は、どちらも同時にアーカイブ(archive.php)としての性質も内包しているらしいということに気が付いたのです。てっきり自分は、「アーカイブページ」というのは年月日でまとめている一覧表示のことのみを指していると思っていたのですね。だから上の不具合ではどうやら、

「この世界の片隅に」というタグで一覧表示させたもの(tag.php)と、それ自体はアーカイブページでもある(archive.php)という解釈から、先にtagとして条件分岐されたところが<h1>内に表示され、続けてarchive.phpとも認識されて<h1>の外側にタイトルが表示されている

 という状況に陥っているようなのです。

 では最初にarchive.phpで判定させて、その後にtag.phpで分岐させれば、先の判定が上書きされて大丈夫になるのかな…と考えたけれど、どうもダメらしい。カテゴリーやタグが、アーカイブより優先されるというわけでもないような感じ。そこでしばらくネットを彼方此方徘徊していたら、偶然「date.php」なるものが存在するということに気付きました。その名からして、如何にも年月日で括ったページにふさわしい。
 早速、タイトル部を分岐させているところに、以前はarchiveと書いていたところをdateで描き直してみると…うまく行きました。意図通りに分岐して、不具合も消えました。

header.phpの修正

	<header>

	<div id="header_A">
		<section id="code_name">
			<h1>
			<?php if(is_home()): ?><?php bloginfo('name'); ?></h1><?php endif; ?>
			<?php if(is_category()): ?><?php the_category(','); ?><a href="<?php echo home_url(); ?>"> ▲</a></h1><?php endif; ?>
			<?php if(is_tag()): ?><?php single_tag_title(); ?><a href="<?php echo home_url(); ?>"> ▲</a></h1><?php endif; ?>
			<?php if(is_page()): ?><?php the_title(); ?><a href="<?php echo home_url(); ?>"> ▲</a></h1><?php endif; ?>
			<?php if(is_single()): ?><?php the_category(','); ?><a href="<?php echo home_url(); ?>"> ▲</a></h1><?php endif; ?>
			<?php if(is_date()): ?><?php wp_title(' '); ?><a href="<?php echo home_url(); ?>"> ▲</a></h1><?php endif; ?>
		</section>
	</div>
	<div id="header_B">
			<section id="search">
			<?php get_search_form(); ?>
			</section>
	</div>

	</header>

11行目:それまでの「if(is_ archive()」から「if(is_date()」へ変更。

 iPad用テーマも作成途中で長期間放置したままになっていますが、年末辺り時間が取れた時にどうにかしたいと考えております。