それぞれのページの表題を出力する
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);
のようになります。