admin管理员组文章数量:1316304
I would like to display the 'file path' in the conventional position on a page on my WordPress site. Something like this:
Does anybody know if this is possible without manually typing it onto each page (not really feasible)?
I would like to display the 'file path' in the conventional position on a page on my WordPress site. Something like this:
Does anybody know if this is possible without manually typing it onto each page (not really feasible)?
Share Improve this question edited Sep 12, 2017 at 10:23 Johansson 15.4k11 gold badges43 silver badges79 bronze badges asked Sep 12, 2017 at 9:50 msrajjc2msrajjc2 111 silver badge2 bronze badges 2- They're called Breadcrumbs. Search for that and you'll find a bunch of plugins. – Jacob Peattie Commented Sep 12, 2017 at 9:56
- This path is home > [category] > [post-title] you can add links and give whatever text you want. you can design the template accordingly, if you don't want to use plugin. – Annapurna Commented Sep 12, 2017 at 9:58
3 Answers
Reset to default 1There are a lot of plugins that offer a breadcrumb, but you can also create your own.
To create a simple breadcrumb, you'll need 2 functions. One to create a chain of categories, and one to generate the breadcrumb itself.
Create a Chain of Categories
This function will generate a list of clickable categories, for when you are on a single post, page or category. We will use this in the breadcrumb later.
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;
}
Generate a Breadcrumb
We'll write a function and use conditionals to generate different outputs based on different locations. We will use the above function here.
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
}
Output the Breadcrumb
After including both of above functions in your theme's functions.php
file, you should use the below code in your theme's header to output the breadcrumb:
if( ! is_home() ) {
wpse_get_breadcrumbs();
}
This will hide the breadcrumb on homepage, since it's not really required.
Without using any plugin you can add custom breadcrumbs to your website. Please try the sample code for simple breadcrumb( in functions.php)
function the_breadcrumb() {
echo '<ul id="crumbs">';
if (!is_home()) {
echo '<li><a href="';
echo get_option('home');
echo '">';
echo 'Home';
echo "</a></li>";
if (is_category() || is_single()) {
echo '<li>';
the_category(' </li><li> ');
if (is_single()) {
echo "</li><li>";
the_title();
echo '</li>';
}
} elseif (is_page()) {
echo '<li>';
echo the_title();
echo '</li>';
}
}
elseif (is_tag()) {single_tag_title();}
elseif (is_day()) {echo"<li>Archive for "; the_time('F jS, Y'); echo'</li>';}
elseif (is_month()) {echo"<li>Archive for "; the_time('F, Y'); echo'</li>';}
elseif (is_year()) {echo"<li>Archive for "; the_time('Y'); echo'</li>';}
elseif (is_author()) {echo"<li>Author Archive"; echo'</li>';}
elseif (isset($_GET['paged']) && !empty($_GET['paged'])) {echo "<li>Blog Archives"; echo'</li>';}
elseif (is_search()) {echo"<li>Search Results"; echo'</li>';}
echo '</ul>';
}
Add the following short code in pages you want to show the breadcrumb
<?php the_breadcrumb(); ?>
Breadcrumbs are an important part of almost every good website. These little navigational aids don’t just tell people where they are on your site, but they also help Google work out how your site is structured. That’s why it makes a lot of sense to add these helpful little pointers. Let’s take a look at how breadcrumbs work.
you can Install https://yoast/ free plugin.
本文标签: How to create a breadcrumb for pages
版权声明:本文标题:How to create a breadcrumb for pages? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742001954a2411194.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论