我对自定义帖子类型和自定义分类法一无所知,所以请耐心等待。我正在尝试为自定义分类法创建面包屑导航project-category
在自定义帖子类型中projects
. 基本上,我需要它这样工作:
自定义职位类型(>);自定义分类级别1>自定义分类级别2>自定义分类级别3>等等。
每个标题都需要链接到相应的页面。我有这种工作方式,但它不是很动态,它只链接了三个级别的导航。以下是我的代码:
<ul>
<li><a href="/projects">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">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循环有关,但我似乎无法逆转它。
谢谢
最合适的回答,由SO网友:Howdy_McGee 整理而成
使用您的方法,我对其进行了一些编辑,以使其更加可行。下面是代码,我会解释。
<ul>
<li><a href="<?php echo home_url(); ?>/projects">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为你提供术语链接,如果Slug发生变化,它会更加可靠。