我希望这不是一个dup——我找不到它!
我的目标是,在我的自定义walker中,附加current-menu-ancestor
如果菜单项是用户当前所在页面/帖子的祖先(无论有多深),则初始化为菜单项。
我希望这样的事情能奏效:(在我的wp_menu_item_classes_by_context()
等效)
if ($post->post_parent) { // Does the post have parents at all?
$ancestors=get_post_ancestors($post->ID); // Get all ancestors
$root=count($ancestors)-1; // Get the key of the top-level one
$parent = $ancestors[$root]; // Top level ancestor ID
// Finally, see if the ancestor ID is the same as the menu_item\'s post ID
if($parent == $menu_item->ID) $classes[] = "current-menu-ancestor";
}
无济于事。
我相信它不会比这复杂得多,但我对Wordpress的特性不是特别精通!
SO网友:Nicolai Grossherr
在我看来,你正在试图通过实际帖子获取祖先,而你很可能应该根据菜单项获取祖先。为什么?因为在菜单中设置层次结构不会更改实际的帖子,尤其是post_parent
属性不会更改-简而言之:(其他)帖子类型和菜单项(实际上也是帖子类型)相关的更改不会相互模仿。
而且,毕竟在一个菜单中可以有层次和非层次的帖子类型,更不用说可以设置的所有其他类型的菜单项了。例如,非分级职位类型post_parent
在数据库中,实际上没有内置的方法来设置它,无论如何都没有意义,因为它们不应该有层次结构。这里甚至没有讨论其他种类,但要说的是,它们中的许多实际上甚至没有能力——或者至少不打算在构建时有一个层次结构——除了作为菜单的一部分之外,但正如所说的那样,信息是菜单的一部分,而不是放入菜单的项目。
最后但并非最不重要的一点是,即使您使用的是层次结构的帖子类型,您也可能希望通过菜单项获取祖先,因为否则您必须模拟帖子类型和菜单之间的层次结构,这意味着您必须对每个层次结构进行两次更改。如果您的菜单完全依赖于层次结构的帖子类型,那么您可能应该寻求一种考虑到这一点的解决方案,并根据层次结构自动生成您的菜单,这样您就不用手动完成这项任务,而可以实现自动化。