0

我正在尝试获取 3 级顶级主菜单,其中在特定父页面的子菜单(子页面)中不可见。我应该是这样的:

  • 产品
    • 产品一
      • 产品1A
      • 产品 1 B
    • 产品 2
      • 产品 2 A
      • 产品 2 B
    • 产品 3
      • 没有子子菜单

我试过child_of了——但没有运气。

谢谢, oxEgen

4

2 回答 2

0

根据我们的评论对话,在菜单元素的 id/class 属性中依赖任意生成的数字是不可靠的。但是,如果您可以控制菜单项的属性,那么您就可以可靠地控制它们的样式。

我相信处理自定义菜单的最佳实践方法是创建一个“nav walker”,它允许您控制哪些项目被发送到 HTML(以及它们如何被发送)。这将使您可以选择不呈现您想要避免的特定菜单项,或者使用 id/class 钩子呈现它们,以便您对其进行样式设置。

wp_nav_menu()教程描述了设置自定义的过程wp_nav_menu(),重要的是涵盖了添加自定义Walker_Nav_Menu类的需要。这在了解 Walker 类教程中有详细描述。

根据父项的页面标题,我已经破解了一种非常基本的方法来满足您的要求。Walker_Nav_Menu在遇到您忽略的菜单节点的情况下,这基本上“欺骗”了它认为它已超过其允许的遍历深度,因此不遵循该树分支。将此添加到您的functions.php文件中:

class Selective_Walker extends Walker_Nav_Menu {  

    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) { 

        if (in_array($element->title, array("Product 3"))) // Add any additional items as req'd to this array
            $depth = $max_depth + 1;

        parent::display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output );  
    }  
}

然后,无论您的主题在哪里添加导航菜单(可能header.php),您都需要将walker参数添加到wp_nav_menu()调用中(除了您已经在使用的任何其他参数之外),将新 walker 类的实例传递给它:

<?php wp_nav_menu( array('walker' => new Selective_Walker(), 'theme_location' => 'primary', 'depth' => 3 ) ); ?>
于 2013-06-18T12:33:02.313 回答
-1

如果您有 PHP 知识,您可以根据自己的要求自定义 wordpress 菜单。我已经构建了一个以数组格式提供父菜单及其子菜单的函数,您可以自定义您的 wordpress 菜单到您想要的任何级别。这是解决方案

于 2015-12-01T08:20:43.783 回答