Хлебные крошки для произвольной таксономии в WordPress
Я совсем новичок в работе с произвольными типами записей и таксономиями, так что прошу терпения. Я пытаюсь создать навигацию в виде хлебных крошек для произвольной таксономии project-category
внутри произвольного типа записей projects
. По сути, мне нужно, чтобы это работало так:
Произвольный тип записей > Таксономия Уровень 1 > Таксономия Уровень 2 > Таксономия Уровень 3 > и т.д.
Каждый заголовок должен быть ссылкой на соответствующую страницу. У меня это как бы работает, но решение не очень динамичное и поддерживает только три уровня навигации. Вот мой текущий код:
<ul>
<li><a href="/projects">Проекты</a></li>
<?
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
if ($parent->name != "") {
echo "<li><a href=\"/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>";
}
if (is_tax("project-category")) {
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy"));
$tax_term_breadcrumb_taxonomy_slug = $term->taxonomy;
echo "<li><a href=\"/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
}
?>
</ul>
До второго уровня это в данный момент работает, как показано ниже:
Произвольный тип записей > Таксономия Уровень 1 > Таксономия Уровень 2
Но если я перехожу на третий уровень, получается так:
Произвольный тип записей > Таксономия Уровень 2 > Таксономия Уровень 3
Чем глубже я захожу, тем больше сбивается порядок уровней. Я понимаю, что проблема в том, что я проверяю только одного родителя, но не могу понять, как проверить всех возможных родителей.
ОБНОВЛЕНИЕ: Мне удалось немного улучшить работу, но теперь элементы выводятся в обратном порядке. Вот обновленный код:
<ul>
<li><a href="<? echo home_url(); ?>/projects">Проекты</a></li>
<?
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
while ($parent->term_id) {
echo "<li><a href=\"" . home_url() . "/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>";
$parent = get_term($parent->parent, get_query_var("taxonomy"));
}
echo "<li><a href=\"" . home_url() . "/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
?>
</ul>
Вместо отображения Произвольный тип записей > Таксономия Уровень 1 > Таксономия Уровень 2 > Таксономия Уровень 3, он выводит Произвольный тип записей > Таксономия Уровень 2 > Таксономия Уровень 1 > Таксономия Уровень 3. Проблема в цикле while, но я не могу понять, как изменить порядок.
Спасибо.

Используя ваш метод, я немного изменил его, чтобы сделать более жизнеспособным. Вот код, ниже я объясню.
<ul>
<li><a href="<?php echo home_url(); ?>/projects">Проекты</a></li>
<?php
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$tmpTerm = $term;
$tmpCrumbs = array();
while ($tmpTerm->parent > 0){
$tmpTerm = get_term($tmpTerm->parent, get_query_var("taxonomy"));
$crumb = '<li><a href="' . get_term_link($tmpTerm, get_query_var('taxonomy')) . '">' . $tmpTerm->name . '</a></li>';
array_push($tmpCrumbs, $crumb);
}
echo implode('', array_reverse($tmpCrumbs));
echo '<li><a href="' . get_term_link($tmpTerm, get_query_var('taxonomy')) . '">' . $term->name . '</a></li>';
?>
</ul>
После получения термина я присваиваю его временной переменной, чтобы можно было перезаписывать. ЕСЛИ у этого термина есть родитель, мы входим в цикл и получаем родителя исходного термина, но присваиваем его нашей временной переменной, потому что нам нужно подняться до самого верхнего термина, поэтому при следующем запуске цикла проверяется, есть ли у term2 родитель. Мы сохраняем HTML в массив, потому что его легче развернуть и вывести в PHP. Если у вас есть вопросы по поводу вышеизложенного, дайте мне знать, надеюсь, это сработает для вас!
О! Также вам следует позволить WordPress самому заботиться о получении ссылок на термины, это намного надежнее, если меняются их ярлыки.

Разобрался примерно за 10 минут до публикации @Howdy_McGee, но смог использовать часть его кода для улучшения своего. Вот что у меня получилось в итоге:
$term = get_term_by("slug", get_query_var("term"), get_query_var("taxonomy") );
$parent = get_term($term->parent, get_query_var("taxonomy"));
$parentItems = array();
while ($parent->term_id) {
array_push($parentItems,"<li><a href=\"" . home_url() . "/project-category/" . $parent->slug . "\">" . $parent->name . "</a></li>");
$parent = get_term($parent->parent, get_query_var("taxonomy"));
}
echo implode (array_reverse($parentItems));
echo "<li><a href=\"" . home_url() . "/project-category/" . $term->slug . "\">" . $term->name . "</a></li>";
