Хлебные крошки вордпресс, в чем косяк?

12
djusel
На сайте с 14.08.2012
Offline
46
1449

Приветствую форумчане! Есть вопрос по хлебным крошкам вордпресс. На моем проекте 5 рубрик которые имеют по 3 подрубрики. В хлебных крошках отображается следующее - Главная-Основная рубрика-Заголовок поста, то есть подрубрики не отображаются. Но есть одно но. В одной записи почему то вместо основной рубрики выводится подрубрика в крошках... Как это можно исправить?

Вот функция крошек

function my_breadcrumb() {

echo '<div xmlns:v="http://rdf.data-vocabulary.org/#">
<div class="breadcrumb" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="/" itemprop="url">
<span itemprop="title">Главная</span></a>&nbsp;»&nbsp;</div>
<div class="breadcrumb" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">';

$categories = get_the_category();
if($categories(0)){
echo '<a href="' . get_category_link($categories(0)->term_id ) . '" itemprop="url">
<span itemprop="title">'. $categories(0)->name . '</span></a>&nbsp;»&nbsp;';
}
echo '</div>
<div class="breadcrumb" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<span itemprop="title">';
echo the_title();
echo '</span></div>
</div>';
}


---------- Добавлено 07.01.2017 в 17:34 ----------

Я сам подразумеваю, что косяк не в функции, а что то не так в движке или каком либо файле. Id основных категорий и подкатегорий идут строго по порядку...

---------- Добавлено 07.01.2017 в 19:16 ----------

Очень не хочется осознавать тот факт, что раньше просто засыпали ответами и каждый действительно хотел помочь разобраться в проблеме. Сейчас все изменилось, эгоизм взял верх...
obius
На сайте с 19.08.2015
Offline
56
#1

Замечательный у вас код, сами писали?

Что возвращает get_the_category? Не отвечайте, уже нагугли, возвращает массив. Тогда вопрос, что это происходит:


$categories(0)

Раз уж полезли в код, соизвольте хотя бы попытаться найти доки и разобраться как использовать ту или иную функцию cms.

От разрабов описание тут.

djusel
На сайте с 14.08.2012
Offline
46
#2
obius:
Замечательный у вас код, сами писали?

Что возвращает get_the_category? Не отвечайте, уже нагугли, возвращает массив. Тогда вопрос, что это происходит:

$categories(0)


Раз уж полезли в код, соизвольте хотя бы попытаться найти доки и разобраться как использовать ту или иную функцию cms.

От разрабов описание тут.

Я не писал этот код, а взял его из общедоступных источников. Нет ли у Вас возможности предоставить ХОРОШИЙ код?

obius
На сайте с 19.08.2015
Offline
56
#3

djusel, киньте в ЛС ссылку на пациента.

djusel
На сайте с 14.08.2012
Offline
46
#4
obius:
djusel, киньте в ЛС ссылку на пациента.

Посмотрели? Что скажете, в чем может быть косяк?

---------- Добавлено 07.01.2017 в 21:10 ----------

obius, Что можете сказать?

obius
На сайте с 19.08.2015
Offline
56
#5

Функция get_the_category возвращает все категории/рубрики, в каких пост был отмечен.

Если я правильно понимаю что вам нужно, то эта функция не подходит для построения хлебных крошек.

Я не пользуюсь wp, но интереса ради по колупаюсь.

В теории нужно рекурсивно получить родительские категории для категории в какой находится пост.

djusel
На сайте с 14.08.2012
Offline
46
#6

obius, Ошибка все тки не в функции крошек. Косяк в иерерхии рубрик, вот как его найти не понимаю, видимых ошибок нет. Только подкатегория Тарифы Теле2 определяется как основная, во всех остальных постах все выводится как должно.

obius
На сайте с 19.08.2015
Offline
56
#7

Ну правильно, если пост "Тариф «Черный» Теле2" отмечен был в категории/рубрике "Тарифы Теле2", то так и будет показывать "Тарифы Теле2" в хлебных крошках как родительскую категорию/рубрику. А еще, если пост "Тариф «Черный» Теле2" отмечен в двух рубриках ( "Теле2" и в "Тарифы Теле2" ), то родительская рубрика может быть и та и та.

Например, если get_the_category() вернет:


Array
(
[0] => WP_Term Object
(
[term_id] => 3
[name] => Теле2
[slug] => %d0%bf%d0%be%d0%b4%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b8-1
[term_group] => 0
[term_taxonomy_id] => 3
[taxonomy] => category
[description] =>
[parent] => 2
[count] => 1
[filter] => raw
[cat_ID] => 3
[category_count] => 1
[category_description] =>
[cat_name] => Подрубрика Рубрики 1
[category_nicename] => %d0%bf%d0%be%d0%b4%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b8-1
[category_parent] => 2
)

[1] => WP_Term Object
(
[term_id] => 2
[name] => Тарифы Теле2
[slug] => %d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-1
[term_group] => 0
[term_taxonomy_id] => 2
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 1
[filter] => raw
[cat_ID] => 2
[category_count] => 1
[category_description] =>
[cat_name] => Рубрика 1
[category_nicename] => %d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-1
[category_parent] => 0
)

)

то по вашему коду $categories[0] вернет данные для "Теле2"

а если


Array
(
[0] => WP_Term Object
(
[term_id] => 3
[name] => Тарифы Теле2
[slug] => %d0%bf%d0%be%d0%b4%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b8-1
[term_group] => 0
[term_taxonomy_id] => 3
[taxonomy] => category
[description] =>
[parent] => 2
[count] => 1
[filter] => raw
[cat_ID] => 3
[category_count] => 1
[category_description] =>
[cat_name] => Подрубрика Рубрики 1
[category_nicename] => %d0%bf%d0%be%d0%b4%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b8-1
[category_parent] => 2
)

[1] => WP_Term Object
(
[term_id] => 2
[name] => Теле2
[slug] => %d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-1
[term_group] => 0
[term_taxonomy_id] => 2
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 1
[filter] => raw
[cat_ID] => 2
[category_count] => 1
[category_description] =>
[cat_name] => Рубрика 1
[category_nicename] => %d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0-1
[category_parent] => 0
)

)

тогда Тарифы Теле2

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

djusel
На сайте с 14.08.2012
Offline
46
#8

obius, статья в двух категориях.

---------- Добавлено 07.01.2017 в 23:29 ----------

obius, Я вообще не силен в кодах, именно по этому беру из общедоступных источников. Я пробовал ставить другие коды, которые выводят всю иерархию ссылок и получается в посте (с ошибкой*) следующая цепочка - главная-подрубрика-основная рубрика-название поста. В остальных постах первой в цепочке рубрик стоит основная рубрика, следом подрубрика.

---------- Добавлено 07.01.2017 в 23:32 ----------

Вставлял 4-5 вариантов разных функций вывода навигационной цепочки, но результат всегда один и тот же.

Вообще я хотел, чтобы выводилась не основная рубрика, а подрубрика в цепочке. Как это реализовать я не знаю. Гуглил, не нашел. Может я не так задаю вопрос...?

obius
На сайте с 19.08.2015
Offline
56
#9
djusel:
Вообще я хотел, чтобы выводилась не основная рубрика, а подрубрика в цепочке. Как это реализовать я не знаю. Гуглил, не нашел. Может я не так задаю вопрос...?

Нужны наглядные примеры.

D
На сайте с 02.02.2010
Offline
149
#10

Для правильной последовательности подрубрик в крошках

Способ номер раз:


<?php
$terms = get_the_terms($post->ID,'category');
$sep = '';
$list = '';
$find_parent = 0;
for( $i = 0; $i < sizeof($terms); ++$i) {
foreach ($terms as $term) {
if ($term->parent == $find_parent) {
$find_parent = $term->term_id;
$list .= $sep . '<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" href="'.get_category_link($term->term_id ) .'" >' . $term->name.'</a></span>';
$sep = ' › ';//разделитель
}
}
}
echo "$list";
?>

Способ номер два:


<?php
$cnt = 0;
$args=array('orderby' => 'count',
'order' => 'DESC'
);
$terms = wp_get_post_terms( $post->ID , 'category', $args);
foreach($terms as $term) {
if ($cnt>0)
$regregy .= ' / ';//разделитель
$regregy .= '<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" href="'.get_category_link($term->term_id ) .'" >' . $term->name.'</a></span>';
++$cnt;
}
echo $regregy;
?>

Во втором способе сортировка по количеству постов в категории. в родительской постов больше(хотя не всегда)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий