如果当前页面是后代页面,则签入Walker

时间:2015-07-20 作者:Philip Kahn

我希望这不是一个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的特性不是特别精通!

1 个回复
SO网友:Nicolai Grossherr

在我看来,你正在试图通过实际帖子获取祖先,而你很可能应该根据菜单项获取祖先。为什么?因为在菜单中设置层次结构不会更改实际的帖子,尤其是post_parent 属性不会更改-简而言之:(其他)帖子类型和菜单项(实际上也是帖子类型)相关的更改不会相互模仿。

而且,毕竟在一个菜单中可以有层次和非层次的帖子类型,更不用说可以设置的所有其他类型的菜单项了。例如,非分级职位类型post_parent 在数据库中,实际上没有内置的方法来设置它,无论如何都没有意义,因为它们不应该有层次结构。这里甚至没有讨论其他种类,但要说的是,它们中的许多实际上甚至没有能力——或者至少不打算在构建时有一个层次结构——除了作为菜单的一部分之外,但正如所说的那样,信息是菜单的一部分,而不是放入菜单的项目。

最后但并非最不重要的一点是,即使您使用的是层次结构的帖子类型,您也可能希望通过菜单项获取祖先,因为否则您必须模拟帖子类型和菜单之间的层次结构,这意味着您必须对每个层次结构进行两次更改。如果您的菜单完全依赖于层次结构的帖子类型,那么您可能应该寻求一种考虑到这一点的解决方案,并根据层次结构自动生成您的菜单,这样您就不用手动完成这项任务,而可以实现自动化。

结束

相关推荐

Next/Previous post navigation

嘿,伙计们,我想让我的下一个和上一个链接只针对一个类别,而不是所有类别,所以当你在该类别的最后一篇文章上停止时,现在它仍在另一个类别中,无法在我的单曲中定义post\\u nav\\u链接。php。。。。你能帮帮我吗?这是我单身的照片。php对不起,我的英语不好,谢谢。