[wp] ページタイトルとパンくずリンクを統一する

ページタイトルとかパンくずナビとかがリンクしてないのが気持ち悪かったので、
WordPressのタイトル周りの統一感を出す関数を作ってみたYO。

シングルページ

タイトルだと「ページタイトル » カテゴリー等 | サイト名」 になり、
パンくずでは「ホーム > カテゴリー等 > ページタイトル」になる。記号はお好みで変更可。
$localから始まるグローバル変数はテンプレートページ内のどこでも使用出来る。

ヘッダに入れるtitleタグのソース:

<title><?php print($GLOBALS&#91;'local_head_title'&#93;); ?><?php bloginfo('name'); ?></title>

パンクズリンク出力ソース:

<?php breadcrumb();?>

functions.phpのソース:

$local_body_id = null;
$local_page_title = null;
$local_category = null;
$local_head_title = null;
$local_category_title = null;
 

function set_page_title(){
	global $local_body_id, $local_page_title, $cat, $local_category,
	$local_head_title, $local_category_title,$s,$author_name,$post;
	
	if(is_category()){	
		$local_category = get_category($cat);
		$local_category_title = $local_category->name;

		if($local_category->parent)
			$local_page_title = get_category_parents($local_category->parent, false, '');
		
		if($local_page_title)
			$local_head_title = wp_title('', false, 'right').' &laquo; '.$local_page_title . ' | ';
		else
			$local_head_title = wp_title('', false, 'right'). ' | ';
			
	} elseif(is_author()) {
		$author = get_query_var('author');
		$author_obj = get_userdata($author);
		
		$local_category_title ='';
		$local_page_title = $author_obj->last_name.$author_obj->first_name;
		$local_head_title = $local_page_title. ' | ';
		
	}else if(is_archive()){
		
		if(is_tag()){
			$tag = get_query_var('tag_id');
			$tag = get_term($tag, 'post_tag', OBJECT, 'display');
				
				//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);
				
				
				$local_head_title = wp_title('', false, 'right').' &laquo; タグ | ';
				$local_category_title = 'タグ: '.$local_page_title;
		
		}elseif(is_day()){
			$local_category_title = get_the_time('Y年F');
			$local_page_title = $$local_category_title.'のアーカイブ';
			$local_head_title = $local_page_title.' | ';
			
		}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.' | ';
		}
		
	}else if(is_search()){
		$allsearch =& new WP_Query("s=$s&showposts=-1");
		$key = wp_specialchars($s, 1);
		$count = $allsearch->post_count;
		$local_category_title = "検索結果";
		
		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>で検索しましたが、何も見つかりませんでした。';
		}
	
	}else if(is_page()){
		if($post->post_parent){
			$local_category_title = get_the_title($post->post_parent);
			$local_head_title = wp_title('&laquo;', false, 'right').$local_category_title." | ";
		}else{
			$local_head_title = wp_title('', false, 'right')." | ";
		}
		$local_page_title = get_the_title();
		
	
	}else if(is_single()){
		
		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;
		
		/*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').' &laquo; '.$local_category_title. ' | ';
	}else if(is_404()){
		$local_category_title = __('Error');
		$local_page_title = __('404 Not Found');
		$local_head_title = wp_title('', false, 'right')." | ";
	}
}

add_action('get_header', set_page_title, 10);



//ぱんくず
function breadcrumb(){
	global $local_body_id, $local_page_title, $local_category,$local_category_title,$post;
	
	if(!is_home()||!is_front_page()){
		print '<p class="breadcrumb">';
		print '<a href="'.get_bloginfo('home').'" title="'.__('Home').'">'.__('Home').'</a> &gt; ';
	
	if(is_category()){
		if($local_category->parent)
			echo(get_category_parents($local_category->parent, TRUE, ' &gt; '));
		print '<span class="current">'.single_cat_title().'</span>';
	
	} elseif (is_author()) {
		print '<span class="current">ユーザー &gt; '.$local_page_title.'</span>';
	}else if(is_archive()){
		
		if(is_tag()){
			print 'タグ:'.'<span class="current">'.$local_page_title.'</span>';
		}else{
			print '<span class="current">'.$local_page_title.'</span>';
		}
		
	}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> &gt; ';
		print '<span class="current">'.the_title().'</span>';
	
	}else if(is_single()){
		
		if(is_attachment()){
			print '<a href="'.get_permalink($post->post_parent).'" title="'.the_title_attribute('echo=0').'">'.get_the_title($post->post_parent).'</a> &gt; ';
		}else{
			if($category[0]->parent)
				echo(get_category_parents($local_category[0]->parent, TRUE, ' &gt; '));
			
			print '<a href="'.get_category_link($local_category&#91;0&#93;->term_id).'">'.$local_category[0]->cat_name.'</a> &gt; ';
		}
		print '<span class="current">'.the_title().'</span>';
		
	}else{
		print '<span class="current">'.$local_page_title.'</span>';
	}
	
	print '</p>';
	
	}
}

パンくずリンクだけの関数では動作しないので両方セットでコピペしてください。

  • 2010-04-14 is_404とか追加