HTMLタイトルを階層構造(パンくずリスト)と一致させる
3月 07
WordPress Tips HTMLタイトル, WordPress Tips, パンくずリスト, 階層構造 No Comments
元ネタはこちら ↓
WebTecNote – [wp] ページタイトルとパンくずリンクを統一する
http://tenderfeel.xsrv.jp/wordpress/816/
パンくずリストを表示させ、かつ、ブラウザに表示されるタイトル(HTMLの title 部分)もこれと一致させる方法です。
以下をテーマのテンプレート「header.php」の当該箇所に記載。
<title>< ?php print($GLOBALS['local_head_title']); ?>< ?php bloginfo('name'); ?></title>
以下をテーマのテンプレート(表示させたい場所に合わせて任意。通常の感覚では「header.php」の下の方)に記述。
ソースを見て貰えれば分かる通り、HTMLタグも一緒に出力しているのでこのままでO.K.。
または後述のソース内のHTMLの箇所をご自身の用途に合わせて修正して下さい(僕は p を span に変えました。この辺は好みで)。
< ?php breadcrumb();?>
テーマの functions.php に以下の二つのソースを記述(但し、<?php と ?> に挟まれた任意の場所に。他のコードの途中に誤って記述してぶった切ってしまわないように、ソースはよく読んで。動かなくなります笑)
$local_body_id = null; $local_page_title = null; $local_category = null; $local_head_title = null; $local_category_title = null;</p> <p>function set_page_title(){ global $local_body_id, $local_page_title, $cat, $local_category, $local_head_title, $local_category_title,$s,$author_name,$post;</p> <p> if(is_category()){ $local_category = get_category($cat); $local_category_title = $local_category->name;</p> <p> if($local_category->parent) $local_page_title = get_category_parents($local_category->parent, false, '');</p> <p> if($local_page_title) $local_head_title = wp_title('', false, 'right').' « '.$local_page_title . ' | '; else $local_head_title = wp_title('', false, 'right'). ' | ';</p> <p> } elseif(is_author()) { $author = get_query_var('author'); $author_obj = get_userdata($author);</p> <p> $local_category_title =''; $local_page_title = $author_obj->last_name.$author_obj->first_name; $local_head_title = $local_page_title. ' | ';</p> <p> }else if(is_archive()){</p> <p> if(is_tag()){ $tag = get_query_var('tag_id'); $tag = get_term($tag, 'post_tag', OBJECT, 'display');</p> <p> //var_dump($tag); if ( is_wp_error( $tag ) ) $local_page_title = $tag; if ( ! empty($tag->name) ) $local_page_title = apply_filters('single_tag_title', $tag->name);</p> <p> $local_head_title = wp_title('', false, 'right').' | '; $local_category_title = 'タグ: '.$local_page_title;</p> <p> }elseif(is_day()){ $local_category_title = get_the_time(get_option('date_format')); $local_page_title = $local_category_title.'のアーカイブ'; $local_head_title = $local_page_title.' | ';</p> <p> }elseif(is_month()) { $local_category_title = get_the_time('Y年F'); $local_page_title = $local_category_title.'のアーカイブ'; $local_head_title = $local_page_title.' | '; } elseif(is_year()) { $local_category_title = get_the_time('Y年'); $local_page_title = $local_category_title.'のアーカイブ'; $local_head_title = $local_page_title.' | '; }</p> <p> }else if(is_search()){ $allsearch =& new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; $local_category_title = "検索結果";</p> <p> if($count!=0){ $local_head_title = "『".$key."』の検索結果 | "; $local_page_title = '<em>'.$key.'</em>で検索した結果、<strong class="count">'.$count.'件</strong>ヒットしました。'; }else{ $local_head_title = "『".$key."』の検索結果 | "; $local_page_title = '<em>'.$key.'</em>で検索しましたが、何も見つかりませんでした。'; }</p> <p> }else if(is_page()){ if($post->post_parent){ $local_category_title = get_the_title($post->post_parent); $local_head_title = wp_title('«', false, 'right').$local_category_title." | "; }else{ $local_head_title = wp_title('', false, 'right')." | "; } $local_page_title = get_the_title();</p> <p> }else if(is_single()){</p> <p> if(is_attachment()){ $local_category_title = get_the_title($post->post_parent); }else{ $local_category = get_the_category(); $local_page_title = $local_category[0]->cat_name;</p> <p> /*if($local_category[0]->parent){ $local_head_title = get_category_parents($local_category[0]->parent, false, ''); }*/ $local_page_title = get_the_title(); $local_category_title = $local_category[0]->cat_name; } $local_head_title = wp_title('', false, 'right').' « '.$local_category_title. ' | '; }else if(is_404()){ $local_category_title = __('Error'); $local_page_title = __('404 Not Found'); $local_head_title = wp_title('', false, 'right')." | "; } }</p> <p>add_action('get_header', set_page_title, 10);
//ぱんくず
function breadcrumb(){ global $local_body_id, $local_page_title, $local_category,$local_category_title,$post;</p> <p> if(!is_home()&&!is_front_page()){ print ' <p class="breadcrumb">'; print ''.__('Home').'> ';</p> <p> if(is_category()){ if($local_category->parent) echo(get_category_parents($local_category->parent, TRUE, '> ')); print '<span class="current">'.single_cat_title().'</span>';</p> <p> } elseif (is_author()) { print '<span class="current">ユーザー> '.$local_page_title.'</span>'; }else if(is_archive()){</p> <p> if(is_tag()){ print 'タグ:'.'<span class="current">'.$local_page_title.'</span>'; }else{ print '<span class="current">'.$local_page_title.'</span>'; }</p> <p> }else if(is_search()){ print '<span class="current">サイト内検索</span>'; }else if(is_page()){ if($post->post_parent) print '<a href="'.get_permalink($post->post_parent).'" title="'.the_title_attribute('echo=0').'">'.get_the_title($post->post_parent).'</a>> '; print '<span class="current">'.the_title().'</span>';</p> <p> }else if(is_single()){</p> <p> if(is_attachment()){ print '<a href="'.get_permalink($post->post_parent).'" title="'.the_title_attribute('echo=0').'">'.get_the_title($post->post_parent).'</a>> '; }else{ if($category[0]->parent) echo(get_category_parents($local_category[0]->parent, TRUE, '> '));</p> <p> print '<a href="'.get_category_link($local_category[0]->term_id).'">'.$local_category[0]->cat_name.'</a>> '; } print '<span class="current">'.the_title().'</span>';</p> <p> }else{ print '<span class="current">'.$local_page_title.'</span>'; }</p> <p> print '</p> <p>';</p> <p> } }
元ソースと見比べて貰えば分かると思いますが、三行目の
if(!is_home()||!is_front_page()){
を
if(!is_home()&&!is_front_page()){
に改変しています。この方が適正かと個人的には思います故。
一昨日投稿時には改変箇所の記述を忘れて元ソースをそのまま丸写しただけでした。訂正してお詫びします。(これはこれで元ソースが何らかの事情で消えてしまった場合の「有益な情報を保存しておく」意味はあるでしょうけど)
2012年4月7日3時34分 加筆訂正:バグ除去。
get_the_time('Y年F');
の記述を
get_the_time(get_option('date_format'));
に変更。こちらの方がスマートなので。