それぞれのページの表題を出力する

WordPressでは、それぞれのページの表題を出力する関数wp_titleが用意されていますが、複数ページに対応していませんし、必ずしも望んだ結果が返ってくるわけではありません。
表題はタイトルタグやh1タグなど様々な場所で使われますので、テンプレートのfunctions.phpに関数を用意しておき、それぞれ必要な場所で呼び出すという方法をお勧めします。

では、サンプルコードです。

function outTitleText($addtitle = true){
	$outText = '';	// 出力するテキストにまずは空文字を入れておく
	global $page;
	global $post;
	$useposttitle = false;
	if(is_home()){
	// TOPページ(ブログ名:ブログ概要)
		$outText .= get_bloginfo('name');
		// ブログ概要があれば出力する
		if($addtitle && get_bloginfo('description') != ''){ $outText .= ":" . get_bloginfo('description'); }
	}elseif(is_search()){
	// 検索結果ページ(検索キーワード)
		$outText .= get_search_query();
	}elseif(is_date()){
	// アーカイブページ(YYYY年MM月アーカイブ)
		$date = single_month_title('',FALSE);
		$outText .= ereg_replace('^[0-9]+.?月','',$date).'年 '.ereg_replace('[0-9]+$','',$date) . ' アーカイブ';
	}elseif(is_single() || is_page()){
		if(!empty($page) && $page != 1){
			// 複数ページでカスタムフィールドpagetitleを使用する場合
			$pagetitle=get_post_custom_values('pagetitle',$post->ID);
			$pagepoint = $page-2;
			if(!empty($pagetitle) && !empty($pagetitle[$pagepoint])){
				$outText .= $pagetitle[$pagepoint];
				$useposttitle = true;
			}else{ $outText .= the_title('','',false); }
		}else{
			// 記事ページ(記事タイトル)
			$outText .= the_title('','',false);
		}
	}else{
	// それ以外(タイトル)
		$outText .= wp_title('',false);
	}
	if(is_paged() || (!empty($page) && $page != 1 && !$useposttitle)){
	// 複数ページの2ページ目以降(ページ数)
		global $paged;
		if(is_paged()){ $pageNo = $paged; }else{ $pageNo = $page; }
		$outText .= ' ('.$pageNo.'ページ)';
	}
	if(!is_home() && $addtitle){
	// TOP以外(:ブログ名)
		$outText .= ":" . get_bloginfo('name');
	}
	$outText = ereg_replace('^([ ]+)','',$outText);
	echo ereg_replace('¥n','',$outText);
}

タイトルタグで使う場合は、「(ページのタイトル):(ブログタイトル)」のような表示ができるようにしています。
引数となっている$addtitleが、:以下を出力するかどうかを制御します。

最初の条件分岐で、トップページなのか、検索結果ページなのか、アーカイブページなのか、記事ページなのかなど、ページの種類により出力内容を分けています。
これらのページ分類に該当しない場合は、WordPress標準のwp_titleが使われます。
それぞれの中身は、あまり凝ったことはしていませんが、記事ページの中身を少し解説しておきます。

複数ページを使用する場合ですが、カスタムフィールドに2ページ目以降のページタイトルをpagetitleとして設定しておくと、そこを読むようにしています。
カスタムフィールドのpagetitleが無い場合は、記事のタイトルを使用します。

次の条件分岐ですが、ここが複数ページ対応となります。
カテゴリやアーカイブなどのページでは、複数ページの場合$pagedという変数がセットされ、記事やページでは$pageという変数が使用されます。
1ページ目との重複を避けるため、2ページ目以降ではタイトルの後ろに「 (nページ)」を付けるようにしています。
なお、記事やページで前述のpagetitleを使用する際はこの部分は適用されません。

次に、$addtitleがtrueの場合はブログ名を付与します。

最後に不要なスペースや改行を取り除き、出力するという流れです。

この関数の呼び出しは、

outTitleText(false);

のようになります。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL