基于自定义分类归档页面修改nav menu的方法
Method for modifying nav menu based on custom taxonomy archive page
我有一个导航菜单,它是根据 wordpress 中的自定义分类法生成的。默认情况下,菜单显示 parent、第一个 child 和第二个 child。例如:
Filmmaking > Production > Cinematography
如果用户选择第二个 child Cinematography
我希望页面发生变化并随之更新导航菜单。在新页面上,我希望它显示第二个 child 和下面的附加 children,例如。
Cinematography > Lenses
> Cameras
> Lighting
我已经编写了代码,但正在尝试获得正确的方法。将菜单设置到正确位置的最佳方法是什么?我想我可以使用几个选项;
使用其中包含当前分类术语的页面 URL 并由此确定菜单的其余部分?
在会话存储中存储某种值以确定当他们单击菜单项时单击的术语并由此设置新菜单
这是解决这个问题的正确方法还是有更好的方法?
您应该使用 get_queried_object 获取当前术语 ID:
$term_id = get_queried_object()->term_id;
然后,您可以使用get_term_children基于父菜单构造菜单:
$taxonomy_name = 'taxonomy_name';
$term_children = get_term_children($term_id, $taxonomy_name);
Obs.: 将 taxonomy_name 替换为您的自定义分类法名称。
get_term_children
通常 returns 一个包含其子 ID 的数组:
array(4) {
[0]=> int(10)
[1]=> int(20)
[2]=> int(30)
[3]=> int(34)
}
终于可以生成自定义菜单了:
<ul>
<li>Cinematography
<ul>
<?php
foreach($term_children as $child_id) :
$term = get_term_by('id', $child_id, $taxonomy_name);
?>
<li>
<a href="<?php echo get_term_link($child_id, $taxonomy_name); ?>">
<?php echo $term->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
</ul>
我有一个导航菜单,它是根据 wordpress 中的自定义分类法生成的。默认情况下,菜单显示 parent、第一个 child 和第二个 child。例如:
Filmmaking > Production > Cinematography
如果用户选择第二个 child Cinematography
我希望页面发生变化并随之更新导航菜单。在新页面上,我希望它显示第二个 child 和下面的附加 children,例如。
Cinematography > Lenses
> Cameras
> Lighting
我已经编写了代码,但正在尝试获得正确的方法。将菜单设置到正确位置的最佳方法是什么?我想我可以使用几个选项;
使用其中包含当前分类术语的页面 URL 并由此确定菜单的其余部分?
在会话存储中存储某种值以确定当他们单击菜单项时单击的术语并由此设置新菜单
这是解决这个问题的正确方法还是有更好的方法?
您应该使用 get_queried_object 获取当前术语 ID:
$term_id = get_queried_object()->term_id;
然后,您可以使用get_term_children基于父菜单构造菜单:
$taxonomy_name = 'taxonomy_name';
$term_children = get_term_children($term_id, $taxonomy_name);
Obs.: 将 taxonomy_name 替换为您的自定义分类法名称。
get_term_children
通常 returns 一个包含其子 ID 的数组:
array(4) {
[0]=> int(10)
[1]=> int(20)
[2]=> int(30)
[3]=> int(34)
}
终于可以生成自定义菜单了:
<ul>
<li>Cinematography
<ul>
<?php
foreach($term_children as $child_id) :
$term = get_term_by('id', $child_id, $taxonomy_name);
?>
<li>
<a href="<?php echo get_term_link($child_id, $taxonomy_name); ?>">
<?php echo $term->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</li>
</ul>