階層が深くなればなるほど、特定のカテゴリーをパンくずリストに出したくない、という場面が出てくるはず。
探しても探しても発見できなかったので、次困ったときのために。
まず、パンくずリストを表示させる方法から。
functions.phpに下記コードを追加します。
<?php
function get_breadcrumbs(){
global $wp_query;
if ( !is_home() ){
// Start the UL
echo '<div id="breadcrumbs"><ul>';
// Add the Home link
echo '<li><a href="'. get_settings('home') .'">ホーム</a></li>';
if ( is_category() )
{
$catTitle = single_cat_title( "", false );
$cat = get_cat_ID( $catTitle );
echo "<li> » ". get_category_parents( $cat, TRUE, " » " ) ."</li>";
}
elseif ( is_archive() && !is_category() )
{
echo "<li> » アーカイブ</li>";
}
elseif ( is_search() ) {
echo "<li> » 検索結果</li>";
}
elseif ( is_404() )
{
echo "<li> » 404 Not Found</li>";
}
elseif ( is_single() )
{
$category = get_the_category();
$category_id = get_cat_ID( $category[0]->cat_name );
echo '<li> » '. get_category_parents( $category_id, TRUE, " » " );
echo the_title('','', FALSE) ."</li>";
}
elseif ( is_page() )
{
$post = $wp_query->get_queried_object();
if ( $post->post_parent == 0 ){
echo "<li> » ".the_title('','', FALSE)."</li>";
} else {
$title = the_title('','', FALSE);
$ancestors = array_reverse( get_post_ancestors( $post->ID ) );
array_push($ancestors, $post->ID);
foreach ( $ancestors as $ancestor ){
if( $ancestor != end($ancestors) ){
echo '<li> » <a href="'. get_permalink($ancestor) .'">'. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</a></li>';
} else {
echo '<li> » '. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</li>';
}
}
}
}
// End the UL
echo "</ul></div>";
}
}
?>
下記のコードをパンくずリストを表示させたいテンプレートに書きます。
<?php get_breadcrumbs(); ?>
参考サイトはこちら
http://blog.playunderworld.com/web/how-to-breadcrumbs-in-wordpress/
これだけだと、すべてのカテゴリーが表示されます。
しかし、特定のカテゴリーを表示したくない場合、どうするのか。
get_category_parentsを変更し、my_category_parentsという独自関数を作成します。
functions.phpに下記コードを追加します。
<?php
function my_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
$chain = '';
$parent = &get_category( $id );
if ( is_wp_error( $parent ) )
return $parent;
if ( $nicename )
$name = $parent->slug;
else
$name = $parent->name;
if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
$visited[] = $parent->parent;
$chain .= my_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
}
if ( ! in_array( $parent->term_id, array( 除外したいカテゴリーのID ) ) ) {
if ( $link )
$chain .= '<a href="' . get_category_link( $parent->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
else
$chain .= $name.$separator;
}
return $chain;
}
?>
除外したいカテゴリーのIDが複数の場合は,(カンマ)区切りです。
参考にしたフォーラムはこちら
http://ja.forums.wordpress.org/topic/6214
先に書いた、パンくずリストを表示する get_breadcrumbs のコードの中の get_category_parents を my_get_category_parents に変更します。
これで特定のカテゴリーの除外したパンくずリストが実現します。







最近のコメント