搜索结果中的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