WordPress хлебные крошки в результатах поиска

В WordPress я сейчас использую SEO-плагин Yoast для отображения панировочные сухари для моих страниц и сообщений, что хорошо работает при посещении определенной страницы.

Вот функция, которую я использую для отображения хлебных крошек внутри моих шаблонов 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!

Кроме того, если это требуется, вот мой search.php файл: http://pastebin.com/0qjb2954

5

Решение

Попробуй это. Это мой собственный рабочий фрагмент, который показывает крошки внутри цикла поиска.

/*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

Другие решения

Использование плагина для генерации панировочных сухарей не является действительно необходимым. Вот простая функция 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(); ?>
1

попробуйте добавить эту строку кода над функцией yoast breadcrumb в вашем файле search.php:

WPSEO_Breadcrumbs::$instance = NULL;

Я думаю, это будет строка 22, а также убедитесь, что вы используете функцию Yoast breadcrumb из вашего вопроса, а не новую функцию breadcrumb (), которая есть сейчас.

Пожалуйста, дайте мне знать, если это работает!

Полное объяснение:

Функциональность хлебных крошек плагина Yoast основана на загрузке страницы, основываясь на текущей странице как дочерней. Чтобы загрузить нужного ребенка и родителей, вам нужно сбросить его, прежде чем запускать функцию. Нет встроенной функции сброса, однако установка статического $ instance в NULL должна заставить плагин заново генерировать свои данные на основе текущего глобального объекта post, который устанавливается во время зацикливания.

1

Опираясь на ответ Явора, я нашел способ. Уже несколько часов бьюсь головой об этом. Вы можете разместить резервную копию и восстановить отусидную петлю. Вот:

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

Страницы поиска имеют условная функция это можно использовать. Вы всегда можете применить это для загрузки панировочных сухарей. Вот пример:

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

Это также зависит от того, где вы загружаете панировочные сухари, но обычно это должно работать, если ваша тема не очень уникальна.

0
По вопросам рекламы [email protected]