搜索结果中的WordPress面包屑

在WordPress中,我目前使用Yoast的SEO插件来显示我的页面和帖子的面包屑,在访问特定页面时工作正常。

这里是我用来显示我的WordPress模板里面的面包屑的功能:

<?php if ( function_exists('yoast_breadcrumb') ) {
    yoast_breadcrumb('<p id="breadcrumbs">','</p>');
} ?>

例如,当浏览About Us的小孩的Team Members ,我得到:

Home > About Us > Team Members

不过,我希望能够在搜索结果循环内显示相同的面包屑(针对各个页面和帖子)。

到目前为止,搜索Members时显示的是:

您的搜索结果:

Team Members 
Home > Search > Members

Members Area 
Home > Search > Members

但是我不希望“搜索结果”页面上有面包屑,我希望它们显示搜索关键字时显示的单个页面和帖子。

例如,想象我再次搜索Members我想显示如下:

您的搜索结果:

Team Members 
Home > About Us > Team Members

Members Area 
Home > Members Area

如果这个或者没有与SEO插件整合,我不会感到厌烦,但是到目前为止,这是我发现的在WordPress中显示面包屑的最佳解决方案!

另外incase需要它,这是我的search.php文件:http://pastebin.com/0qjb2954


尝试这个。 这是我自己的工作片段,它显示搜索循环内的面包屑。

/*Begin Loop */
<?php 
echo '<div class="b-search_result_list__item_breadcrumbs breadcrumbs">';

$current_type = get_post_type();
if ($current_type == 'page') {

    $parents = get_post_ancestors(get_the_ID());
    if($parents){

        for($i=count($parents)-1;$i>=0;$i--){
            echo '<span typeof="v:Breadcrumb">';
            echo '<a rel="v:url" property="v:title" title="'.get_the_title($parents[$i]).'" href="'.get_permalink($parents[$i]).'">'.get_the_title($parents[$i]).'</a>';
            echo '</span>';
        }
    }else{
        echo '<span typeof="v:Breadcrumb">';
        echo '<a rel="v:url" property="v:title" title="'.get_bloginfo('name').'" href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>';
        echo '</span>';
    }
    echo '<span typeof="v:Breadcrumb">';
    echo '<span property="v:title">'.get_the_title().'</span>';
    echo '</span>';
}else{
    $current_obj = get_post_type_object($current_type);

        echo '<span typeof="v:Breadcrumb">';
        echo '<a rel="v:url" property="v:title" title="'.get_bloginfo('name').'" href="'.get_bloginfo('url').'">'.get_bloginfo('name').'</a>';
        echo '</span>';
        echo '<span typeof="v:Breadcrumb">';
        echo '<a rel="v:url" property="v:title" title="'.$current_obj->labels->name.'" href="'.get_post_type_archive_link( $current_type ).'">'.$current_obj->labels->name.'</a>';
        echo '</span>';

        $current_taxonomies = get_object_taxonomies($current_type);

        if($current_taxonomies){
            $current_terms = get_the_terms(get_the_ID(), $current_taxonomies[0]);

            if($current_terms){
                $current_term = array_shift($current_terms);

                echo '<span typeof="v:Breadcrumb">';
                    echo '<a rel="v:url" property="v:title" title="'.$current_term->name.'" href="'.get_term_link($current_term).'">'.$current_term->name.'</a>';
                echo '</span>';

                /*
                var_dump($current_obj->labels->name); // Archive name
                var_dump(get_post_type_archive_link( $current_type )); // Archive link
                var_dump($current_term->name);  // Term name
                var_dump(get_term_link($current_term)); // Term link
                var_dump(get_permalink()); // Post link 
                */
            }
        }
        echo '<span typeof="v:Breadcrumb">';
        echo '<span property="v:title">'.get_the_title().'</span>';
        echo '</span>';

}    

echo '</div>';
?>
/*End Loop*/

使用插件生成面包屑并不是必须的。 这里有一个简单的PHP函数可以添加到你的functions.php文件中:

function breadcrumbs() {
    global $post;
    echo "<ul id='breadcrumbs'>";
    if (!is_home()) {
        echo '<li><a href="' . get_option('home') . '">Home</a></li>';
        if (is_category() || is_single()) {
            echo "<li>" . the_category(' </li><li> ');
            if (is_single()) {
                echo "</li><li>" . the_title() . "</li>";
            }
        } elseif (is_page()) {
            if($post->post_parent){
                foreach ( get_post_ancestors( $post->ID ) as $ancestor ) {
                    echo '<li><a href="' . get_permalink($ancestor) . '" title="' . get_the_title($ancestor) . '">' . get_the_title($ancestor) . '</a></li>' .  get_the_title();
                }
            } else {
                echo "<li>" . get_the_title() . "</li>";
            }
        }
    } elseif (is_tag()) {
        single_tag_title();
    } elseif (is_day()) {
        echo "<li>Archive for " . the_time('F jS, Y') . "</li>";
    } elseif (is_month()) {
        echo "<li>Archive for " . the_time('F, Y') . "</li>";
    } elseif (is_year()) {
        echo "<li>Archive for " . the_time('Y') . "</li>";
    } elseif (is_author()) {
        echo "<li>Author Archive</li>";
    } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) {
        echo "<li>Blog Archives</li>";
    } elseif (is_search()) {
        echo "<li>Search Results for" . the_search_query() . "</li>";
    }
    echo "</ul>";
}

以及一些CSS来设计它,根据需要进行自定义

#breadcrumbs {
    list-style:none;
    margin:5px 0;
    overflow:hidden;
}

#breadcrumbs li{
    float:left;
}
#breadcrumbs li+li:before {
    content: '| ';
    padding:0 4px;
}

然后,您可以在您喜欢的任何页面上实施这些面包屑,包括您的searchpage.php文件或用于显示此调用搜索结果的文件

<?php breadcrumbs(); ?>

尝试在您的search.php文件中的yoast breadcrumb函数之上添加以下代码行:

WPSEO_Breadcrumbs::$instance = NULL;

这将是我相信的第22行,并且确保使用您问题中的Yoast面包屑函数,而不是现在存在的新breadcrumb()函数。

请让我知道这是否工作!

完整的解释:

Yoast插件的面包屑功能基于页面加载,基于当前页面作为子页面。 为了使它载入正确的孩子和父母,您需要在运行该功能之前将其重置。 没有内置的重置函数,但是将静态$实例设置为NULL应该会导致插件基于当前循环中设置的全局后对象重新生成其数据。

链接地址: http://www.djcxy.com/p/39187.html

上一篇: WordPress breadcrumbs in search results

下一篇: Wordpress breadcrumbs issue