我正在尝试获取 3 级顶级主菜单,其中在特定父页面的子菜单(子页面)中不可见。我应该是这样的:
- 产品
- 产品一
- 产品1A
- 产品 1 B
- 产品 2
- 产品 2 A
- 产品 2 B
- 产品 3
- 没有子子菜单
- 产品一
我试过child_of
了——但没有运气。
谢谢, oxEgen
我正在尝试获取 3 级顶级主菜单,其中在特定父页面的子菜单(子页面)中不可见。我应该是这样的:
我试过child_of
了——但没有运气。
谢谢, oxEgen
根据我们的评论对话,在菜单元素的 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 ) ); ?>
如果您有 PHP 知识,您可以根据自己的要求自定义 wordpress 菜单。我已经构建了一个以数组格式提供父菜单及其子菜单的函数,您可以自定义您的 wordpress 菜单到您想要的任何级别。这是解决方案