WordPress搜索结果中的面包屑
在WordPress中,我目前使用Yoast's SEO Plugin为我的网页和帖子显示breadcrumbs,在访问特定页面时工作正常。WordPress搜索结果中的面包屑
这里是我使用,以显示我的WordPress模板里面的面包屑功能:
<?php if (function_exists('yoast_breadcrumb')) {
yoast_breadcrumb('<p id="breadcrumbs">','</p>');
} ?>
例如浏览到Team Members
这是当About Us
一个孩子,我得到:
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中显示面包屑的最佳解决方案!
而且柜面abody需要它,这是我的search.php
文件:http://pastebin.com/0qjb2954
使用插件生成面包屑是不是真的有必要。这里有一个简单的PHP功能,您可以添加到您的functions.php文件:一些CSS样式它,定制你的愿望
#breadcrumbs {
list-style:none;
margin:5px 0;
overflow:hidden;
}
#breadcrumbs li{
float:left;
}
#breadcrumbs li+li:before {
content: '| ';
padding:0 4px;
}
然后就可以实现在任何网页上的面包屑沿
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>";
}
你喜欢的,包括你的searchpage.php文件或文件为准您使用此调用
<?php breadcrumbs(); ?>
尝试加入这一行上面的代码yoast面包屑功能我来显示搜索结果n您的search.php中的文件:
WPSEO_Breadcrumbs::$instance = NULL;
这将是22行,我相信,也请务必使用Yoast面包屑功能,从你的问题,而不是新的面包屑()函数,现在的存在。
请让我知道这是否行得通!
充分说明:
的Yoast插件面包屑的功能是建立在页面加载,基于当前页为孩子上。为了使它载入正确的孩子和父母,您需要在运行该功能之前将其重置。没有内置的重置函数,但是将静态$实例设置为NULL应该会导致插件基于当前循环中设置的全局后对象重新生成其数据。
搜索页面有conditional function可以使用。您始终可以将其应用于加载面包屑。这里有一个例子:
if (! is_search()) {
if (function_exists('yoast_breadcrumb')) {
yoast_breadcrumb('<p id="breadcrumbs">','</p>');
}
}
这取决于你在哪里加载的面包屑为好,但这通常应该工作,除非你的主题非常独特。
试试这个。这是我自己的工作片段,它显示搜索循环内的面包屑。
/*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*/
建立在Yavor的答案我找到了一种方法。几个小时以来,我一直在喋喋不休。您可以放置备份并恢复循环的otuside。那就是:
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;
它假货这样新刷新的面包屑认为这是不是搜索网页,但单篇文章或页面或任何你正在显示的搜索结果的查询,使之奇。
对不起,刚发现一些语法错误,但现在应该都很好。几个星期没有触及php,所以让我知道它是如何发生的,但应该工作得很好。 – davidcondrey 2014-10-13 09:01:29
它的晚我能说什么..大声笑 – davidcondrey 2014-10-13 09:06:58
从您的搜索结果中发布代码php文件 – davidcondrey 2014-10-13 09:12:44