首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索结果中的WordPress面包屑

搜索结果中的WordPress面包屑
EN

Stack Overflow用户
提问于 2014-10-10 15:23:39
回答 5查看 5K关注 0票数 6

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

下面是我用来显示WordPress模板内部面包屑的函数:

代码语言:javascript
复制
<?php if ( function_exists('yoast_breadcrumb') ) {
    yoast_breadcrumb('<p id="breadcrumbs">','</p>');
} ?>

例如,当浏览到Team Members (它是About Us的一个子类)时,我得到:

代码语言:javascript
复制
Home > About Us > Team Members

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

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

你的搜索结果: 团队成员主页>搜索>成员区域主页>搜索>成员

但是我不想要搜索结果页面的面包屑,我想要它们用于搜索关键字时显示的各个页面和帖子。

例如,假设我再次搜索Members,我希望显示如下所示:

你的搜索结果: 团队成员主页>关于我们>团队成员区域主页>成员区域

我并不担心这是否与SEO插件集成,不过到目前为止,这是我在WordPress中发现的显示面包屑的最佳解决方案!

另外,如果abody需要它,下面是我的search.php文件:http://pastebin.com/0qjb2954

EN

回答 5

Stack Overflow用户

发布于 2014-12-18 02:03:29

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

代码语言:javascript
复制
/*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*/
票数 3
EN

Stack Overflow用户

发布于 2014-10-16 00:43:07

尝试在search.php文件中的约斯特面包屑函数之上添加以下代码:

代码语言:javascript
复制
WPSEO_Breadcrumbs::$instance = NULL;

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

请让我知道这是否有效!

全面解释:

Yoast插件面包屑功能构建在页面加载上,基于当前页面作为子页面。要使它加载正确的子程序和父母,您需要在运行该函数之前重置它。没有内置的重置功能,但是将静态$instance设置为NULL应该会导致插件根据当前的全局post对象重新生成数据,该对象是在循环时设置的。

票数 2
EN

Stack Overflow用户

发布于 2015-10-18 18:50:04

在雅弗回答的基础上,我找到了一条路。几个小时来一直在胡思乱想。不过,您可以放置备份并恢复循环的otuside。下面是:

代码语言:javascript
复制
global $wp_query;
//backup
$old_singular_value = $wp_query->is_singular;
//change
$wp_query->is_singular = true;
//reset
WPSEO_Breadcrumbs::$instance = NULL;
//breadcrumbs
if (function_exists('yoast_breadcrumb')){
    yoast_breadcrumb('<p id="breadcrumbs">','</p>');
}
//restore
$wp_query->is_singular = $old_singular_value;

它伪造查询以使其单数,因此新刷新的面包屑认为这不是搜索页面,而是一个帖子或页面,或者是作为搜索结果显示的任何内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26302801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档