我正在尝试创建一个侧栏导航菜单,该菜单会根据站点中的当前位置进行更改。
这是整个导航的样子:
目前我正在使用自定义导航菜单为主页创建菜单,以便他们可以通过管理面板中的菜单链接编辑自定义菜单。他们不希望在联系页面上显示侧边栏导航菜单。
在关于我们页面时,他们希望侧边栏导航看起来像这样:
在“程序”页面上,他们希望它看起来像这样:
在第1级页面上,他们希望它看起来像这样:
确保仅为当前父级显示子页面。
当在Level 2a页面上时,他们希望它看起来像在1d级页面上一样:
另外需要注意的是,我需要能够以与其他项目不同的方式设置当前页面列表项的样式,因此需要添加某种类型的当前页面项目类每次都列出项目。
到目前为止,我还没有能够在1d级别打印当前父级的子级。 wp_list_pages允许您设置深度,但不限制它仅限于当前父级。它也为所有兄弟姐妹打印孩子(即,如果在1d级别,它打印所有2级孩子在他们各自的父母下面,而不是仅在目前活跃的父母下面的2级孩子)。
我该怎么做?
<?php $current_section = "";
if(is_front_page()):
$current_section = "home";
$nav_args = array(
'theme_location' => $current_section,
'container' => 'nav',
'container_class' => 'side-nav'
);
wp_nav_menu( $nav_args );
else:
endif;?>
这就是我现在所拥有的。我删除了else块中的所有代码,因为它无论如何都没有工作。
答案 0 :(得分:0)
尝试使用以下代码仅显示当前父级及其子菜单
<?php
if($post->post_parent) {
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
$titlenamer = get_the_title($post->post_parent);
}
else {
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
$titlenamer = get_the_title($post->ID);
}
if ($children) { ?>
<h2> <?php echo $titlenamer; ?> </h2>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
This section of codex explain this
另外需要注意的是,我需要能够设计样式 current-page list-item与其他项目不同,所以 需要添加某种current-page-item类 每次都列出项目。
每次都不需要写一个特殊的课程。 WordPress会自动添加一个类.current-menu-item
。您只需要从CSS自定义该类。
希望这能解决你的一些问题.. :)
答案 1 :(得分:0)
这是我提出的代码:
<?php
$children = wp_list_pages('depth=1&title_li=&child_of='.$post->ID.'&echo=0');
$current_page = wp_list_pages('title_li=&include='.$post->ID.'&echo=0');
$grandparent=0;
if($post->post_parent):
$parent = wp_list_pages('title_li=&include='.$post->post_parent.'&echo=0');
$siblings = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&exclude='.$post->ID.'&echo=0');
$parent_children = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&echo=0');
$parent_post = get_post($post->post_parent);
$grandparent = $parent_post->post_parent;
$parent_siblings = wp_list_pages('depth=1&title_li=&child_of='.$grandparent.'&echo=0&exclude='.$post->post_parent);
endif;
if(!$post->post_parent && $children):?>
<ul class="menu">
<?php echo $children;?>
</ul>
<?php elseif($post->post_parent && $children):?>
<ul class="menu">
<?php echo $current_page;?>
<ul class="menu">
<?php echo $children;?>
</ul>
<?php echo $siblings;?>
</ul>
<?php elseif($grandparent && $post->post_parent && !$children):?>
<ul class="menu">
<?php echo $parent;?>
<ul class="menu">
<?php echo $parent_children;?>
</ul>
<?php echo $parent_siblings;?>
</ul>
<?php elseif(!$grandparent && $post->post_parent && !$children):?>
<ul class="menu">
<?php echo $parent_children;?>
</ul>
<?php endif;?>
这不是最优雅的解决方案,但至少它符合我的要求。唯一可以改善其实际功能的是保持菜单项的顺序,同时仍然允许子菜单。此代码使用子菜单删除菜单项并将其移至顶部。我无法想出任何其他方法来做到这一点。