Wordpress自定义菜单

时间:2013-06-17 10:08:27

标签: wordpress

我试图获得3级顶级主菜单,其中不应该看到特定父页面的子菜单(子页面)。我应该是这样的:

  • 产品
    • 产品1
      • 产品1 A
      • 产品1B
    • 产品2
      • 产品2 A
      • 产品2 B
    • 产品3
      • 没有SUB SUB MENU

我试过child_of - 但没有运气。

谢谢, oxEgen

2 个答案:

答案 0 :(得分:0)

根据我们的评论对话,依赖菜单元素上id / class属性中任意生成的数字并不健全。但如果你能控制如何归因你的菜单项,那么你就可以可靠地控制它们的风格。

我认为处理自定义菜单的最佳做法是创建一个“nav walker”,它允许您控制向HTML发出哪些项目(以及 它们是如何发出的)。这将使您可以选择不渲染您想要避免的特定菜单项,或者使用id / class hooks渲染它们,以便对它们进行样式化。

This wp_nav_menu() tute介绍了设置自定义wp_nav_menu()的过程,重要的是需要添加自定义Walker_Nav_Menu类。这在this Understanding the Walker class tute中有详细描述。

根据父项的页面标题,我已经破解了一种非常基本的方法来执行您需要的操作。这基本上“欺骗”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()调用(除了您提供的任何其他参数)已经使用了),传递给你一个新的助行者类的实例:

<?php wp_nav_menu( array('walker' => new Selective_Walker(), 'theme_location' => 'primary', 'depth' => 3 ) ); ?>

答案 1 :(得分:-1)

如果您有PHP知识,您可以根据自己的要求自定义wordpress菜单。我有一个功能,可以以数组格式提供父菜单及其子菜单,您可以自定义您的wordpress菜单,达到您想要的任何级别。 这是solution