元ネタはこちら ↓
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'));
に変更。こちらの方がスマートなので。