如何为页面创建面包屑?

时间:2017-09-12 作者:msrajjc2

我想在WordPress网站的页面上以常规位置显示“文件路径”。类似这样:

example

有没有人知道,如果不在每页上手动键入它,这是否可行(实际上不可行)?

3 个回复
SO网友:Johansson

有很多插件提供面包屑,但您也可以创建自己的插件。

要创建一个简单的面包屑,需要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();
}
这将隐藏主页上的面包屑,因为它实际上不是必需的。

SO网友:anittas joseph

无需使用任何插件,您就可以向网站添加自定义面包屑。请尝试简单面包屑的示例代码(在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>\';
}

在要显示面包屑的页面中添加以下短代码

<?php the_breadcrumb(); ?>

SO网友:Arvind Singh

面包屑是几乎所有优秀网站的重要组成部分。这些小小的导航辅助工具不仅告诉人们他们在你的网站上的位置,还帮助谷歌确定你的网站是如何构建的。这就是为什么添加这些有用的小指针很有意义。让我们看看面包屑是如何工作的。

您可以安装https://yoast.com/ 免费插件。

结束

相关推荐

Breadcrumbs - get the author?

我有自己的函数breadcrumbs()。在其中,我调用is\\u author()来确定我是否在作者页面上。如果是真的,我想知道我在哪个作者的页面上。我尝试了\\u author(),但没有结果。我还查阅了WP codex。有人能帮忙吗?