有很多插件提供面包屑,但您也可以创建自己的插件。
要创建一个简单的面包屑,需要2个函数。一个用于创建类别链,另一个用于生成面包屑本身。
创建类别链
此功能将生成一个可单击类别的列表,当您在单个帖子、页面或类别上时。稍后我们将在面包屑中使用此选项。
function wpse_get_category_parents( $id, $link = false, $separator = \'/\', $nicename = false, $visited = array(), $iscrumb=false ) {
$chain = \'\';
$parent = get_term( $id, \'category\' );
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 .= wpse_get_category_parents( $parent->parent, $link, $separator, $nicename, $visited , $iscrumb);
}
if (is_rtl()){
$sep_direction =\'\\\\\';
} else {
$sep_direction =\'/\';
}
if ($iscrumb){
$chain .= \'<li><span class="sep">\'.$sep_direction.\'</span><a href="\' . esc_url( get_category_link( $parent->term_id ) ) . \'"><span>\'.$name.\'</span></a></li>\' . $separator ;
} elseif ( $link && !$iscrumb) {
$chain .= \'<a href="\' . esc_url( get_category_link( $parent->term_id ) ) . \'">\'.$name.\'</a>\' . $separator ;
} else {
$chain .= $name.$separator;
}
return $chain;
}
生成面包屑我们将编写一个函数并使用条件根据不同的位置生成不同的输出。我们将在这里使用上述函数。
function wpse_get_breadcrumbs() {
global $wp_query;
if (is_rtl()){
$sep_direction =\'\\\\\';
} else {
$sep_direction =\'/\';
}?>
<ul><?php
// Adding the Home Page ?>
<li><a href="<?php echo esc_url( home_url() ); ?>"><span> <?php bloginfo(\'name\'); ?></span></a></li><?php
if ( ! is_front_page() ) {
// Check for categories, archives, search page, single posts, pages, the 404 page, and attachments
if ( is_category() ) {
$cat_obj = $wp_query->get_queried_object();
$thisCat = get_category( $cat_obj->term_id );
$parentCat = get_category( $thisCat->parent );
if($thisCat->parent != 0) {
$cat_parents = wpse_get_category_parents( $parentCat, true, \'\', false, array(), true );
}
if ( $thisCat->parent != 0 && ! is_wp_error( $cat_parents ) ) {
echo $cat_parents;
}
echo \'<li><span class="sep">\'.$sep_direction.\'</span><a href="\'.get_category_link($thisCat).\'"><span>\'.single_cat_title( \'\', false ).\'</span></a></li>\';
} elseif ( is_archive() && ! is_category() ) { ?>
<li><span class="sep"><?php echo $sep_direction;?></span> <?php _e( \'Archives\' ); ?></li><?php
} elseif ( is_search() ) { ?>
<li><span class="sep"><?php echo $sep_direction;?></span> <?php _e( \'Search Results\' ); ?></li><?php
} elseif ( is_404() ) { ?>
<li><span class="sep"><?php echo $sep_direction;?></span> <?php _e( \'404 Not Found\' ); ?></li><?php
} elseif ( is_singular() ) {
$category = get_the_category();
$category_id = get_cat_ID( $category[0]->cat_name );
$cat_parents = wpse_get_category_parents( $category_id, true, \'\',false, array(), true );
if ( ! is_wp_error( $cat_parents ) ) {
echo $cat_parents;
}?>
<li>
<a href="<?php the_permalink();?>"><span class="sep"><?php echo $sep_direction;?></span><?php the_title();?></a>
</li><?php
} elseif ( is_singular( \'attachment\' ) ) { ?>
<li>
<span class="sep"><?php echo $sep_direction;?></span> <?php the_title(); ?>
</li><?php
} elseif ( is_page() ) {
$post = $wp_query->get_queried_object();
if ( $post->post_parent == 0 ) { ?>
<li><?php _e( \'<span class="sep">/</span>\' ); the_title(); ?></li><?php
} 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 ) ) { ?>
<li>
<span class="sep"><?php echo $sep_direction;?></span><a href="<?php echo esc_url( get_permalink( $ancestor ) ); ?>"> <span><?php echo strip_tags( apply_filters( \'single_post_title\', get_the_title( $ancestor ) ) ); ?></span></a>
</li><?php
} else { ?>
<li>
<span class="sep"><?php echo $sep_direction;?></span><?php echo strip_tags( apply_filters( \'single_post_title\', get_the_title( $ancestor ) ) ); ?>
</li><?php
}
}
}
}
} ?>
</ul><?php
}
在主题的
functions.php
文件中,您应该使用主题标题中的以下代码来输出面包屑:
if( ! is_home() ) {
wpse_get_breadcrumbs();
}
这将隐藏主页上的面包屑,因为它实际上不是必需的。