スポンサーリンク

パンくずリストを設置

functions.phpに関数に以下を作成。
一応、区切りと最初のトップページの有無が設定できるようにしてみた。
大変見難いソースとなっていますが、今回は一応公開しておきます。
意図的にソースにはコメントを付けておきました。

/* $separator…区切り文字、 $is_homeviewflag = 最初のHomeを出すか出さないか*/
function get_breadnavi($separator = ' > ', $is_homeviewflag = true) {
	global $wp_query;
	global $post;
	if ( !is_home() && !is_front_page() ){
		$homeviewflag = true;
		if ( $is_homeviewflag ) { 
			?>
			<a href="<?php echo home_url( '/' ); ?>">
				<?php echo _e('Home', 'meetheme' ); ?>
			</a>
			<?php
		} else {
			$homeviewflag = false;
		}
		
		/* カテゴリーの場合 */
		if ( is_category() ) {
			$catarr = array();
			$tempcatid = get_query_var('cat');
			// 意図的に使用しない
			// $tempcatids = get_the_category();
			// $tempcatid = $tempcatids[0];
			
			// あとget_category_parents() で作成すると
			// カテゴリーの最後に余計な区切り($separator)が入ってしまうので使用しない
			$tempcat = get_category($tempcatid);
			if ( $tempcat ) {
				$catarr[] = clone $tempcat;
				while ( $tempcat->category_parent != 0 ) {
					$tempcat = get_category( $tempcat->category_parent );
					if ( is_wp_error( $tempcat ) ) {
						return;
					}
					if ( $tempcat->cat_ID != 0 ) {
						$catarr[] = clone $tempcat;
					}
				}
				foreach( array_reverse($catarr) as $cat ) {
					if ( $homeviewflag ) {
						echo $separator;
					} else {
						$homeviewflag = true;
					}
					?>
					<a href="<?php echo get_category_link( $cat->term_id ); ?>" title="<?php echo esc_attr( sprintf( __( "View all posts in %s" ), $cat->name ) ); ?>">
						<?php echo esc_html($cat->name); ?>
					</a>
					<?php
				}
			}			
		/* アーカイブの場合(タグとカテゴリーは除く) */
		} elseif ( is_archive() && !is_category() && !is_tag() ) {
			if ( $homeviewflag ) {
				echo $separator;
			}
			?>
			<a href="<?php echo get_month_link(get_the_time('Y'), get_the_time('m')); ?>" title="<?php echo get_the_time(__('Y-m', 'meetheme' )); ?>">
				<?php echo get_the_time(__('Y-m', 'meetheme' )); ?>
			</a>
			<?php
		/* 検索結果の場合 */
		} elseif ( is_search() ) {
			if ( $homeviewflag ) {
				echo $separator;
			}
			echo _e('Search Results', 'meetheme' );
		/* 404の場合 */
		} elseif ( is_404() ) {
			if ( $homeviewflag ) {
				echo $separator;
			}
			echo _e('404 Not Found', 'meetheme' );
		/* シングルページの場合 */
		} elseif ( is_single() ) {
			$tempcatids = get_the_category();
			$tempcatid = $tempcatids[0];
			if ( $homeviewflag ) {
				echo $separator;
			}
			echo get_category_parents( $tempcatid->cat_ID, TRUE, $separator );
			$strtitle = the_title('','', FALSE) ;
			// 記事タイトルが未記入な場合はidを表示させる
			if ( !isset($strtitle) || $strtitle == "" ) {
				$strtitle = $post->ID;
			}
			echo $strtitle;
		/* ページの場合(フロントページは除く) */
		/* 本来is_front_page()は入ってこないが
		先頭のif ( !is_home() && !is_front_page() )を取った場合でも動くように) */
		} elseif ( is_page() && !is_front_page() ) {
			$post = $wp_query->get_queried_object();
			if ( $post->post_parent == 0 ){
				if ( $homeviewflag ) {
					echo $separator;
				}
				the_title('','', TRUE);
			} else {
				$ancestors = array_reverse( get_post_ancestors( $post->ID ) );
				array_push($ancestors, $post->ID);
				foreach ( $ancestors as $ancestor ){
					$strtitle = get_the_title( $ancestor );
					if ( !isset($strtitle) || $strtitle == "" ) {
						$strtitle = $post->ID;
					}
					if ( $homeviewflag ) {
						echo $separator;
					} else {
						$homeviewflag = true;
					}
					if( $ancestor != end($ancestors) ){
						?>
						<a href="<?php echo get_permalink($ancestor); ?>">
							<?php echo strip_tags( apply_filters( 'single_post_title', $strtitle ) ); ?>
						</a>
						<?php
					} else {
						echo strip_tags( apply_filters( 'single_post_title', $strtitle ) );
					}
				}
			}
		/* タグの場合 */
		} else if ( is_tag() ) {
			if ( $homeviewflag ) {
				echo $separator;
			}
			$tag_id = get_query_var('tag_id');
			$tag_properties = get_tag( $tag_id );
			if ( $tag_properties ) {
				?>
				<a href="<?php echo get_tag_link($tag_id); ?>" title="<?php echo esc_attr( $tag_properties->name ); ?>">
					<?php echo esc_attr( $tag_properties->name ); ?>
				</a>
				<?php
			} else {
				echo _e('Tagname is empty', 'meetheme' );
			}
		}
	}
}

で、header.phpには

<div class="bread_nav">
<?php get_breadnavi(); ?>
</div>

と記述すれば良い
get_breadnavi();で引数なしだと
Home  > カテゴリー > タイトル
という感じで表示される。
引数を渡せば多少は変更可能。
get_breadnavi(‘|’, false);
とかだと、

カテゴリー|タイトル

となる。
もし、今後使用していて不具合等が出たら
変更していきますが、取り敢えず希望通りの動きにすることが出来ました。

2011年04月20日 追記
10行目を

&lt;?php echo get_settings('home'); ?&gt;

から

&lt;?php echo home_url( '/' ); ?&gt;

に変更。

2013年01月26日 追記・リニューアルに伴い文章 校正
カスタム投稿には対応していません。
修正版をそのうち書く予定…
というかプラグインとしてそのうち公開させます。

[`evernote` not found]