Php 如何在wordpress中创建包含父母、子女和兄弟姐妹的页面列表,但仅限于某些情况?
我正在尝试创建一个侧栏导航菜单,它会根据站点中的当前位置进行更改 以下是导航的整体外观:Php 如何在wordpress中创建包含父母、子女和兄弟姐妹的页面列表,但仅限于某些情况?,php,wordpress,Php,Wordpress,我正在尝试创建一个侧栏导航菜单,它会根据站点中的当前位置进行更改 以下是导航的整体外观: 家 关于我们 1a级 1b级 1c级 节目 1d级 2a级 2b级 1e级 2c级 2d级 一楼 联系我们 目前,我正在使用自定义导航菜单为主页创建菜单,以便他们可以通过管理面板中的菜单链接编辑自定义菜单。他们不希望联系人页面上有侧栏导航菜单 在“关于我们”页面上,他们希望侧栏导航如下所示: 1a级 1b级 1c级 在“程序”页面上,他们希望它看起来像这样: 1d级 1e级 一楼
- 家
- 关于我们
- 1a级
- 1b级
- 1c级
- 节目
- 1d级
- 2a级
- 2b级
- 1e级
- 2c级
- 2d级
- 一楼
- 1d级
- 联系我们
- 1a级
- 1b级
- 1c级
- 1d级
- 1e级
- 一楼
- 1d级
- 2a级
- 2b级
- 1e级
- 一楼
- 1d级
- 2a级
- 2b级
- 1e级
- 一楼
<?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块中的所有代码,因为它无法正常工作。请尝试以下代码,仅显示当前父菜单及其子菜单
<?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 } ?>
同样需要注意的是,我需要能够设计
当前页面列表项与其他项不同,因此
需要添加某种类型的当前页面项类
每次列出一个项目
没有必要每次都编写一个特殊的类。WordPress将自动添加一个类。当前菜单项。您只需要从CSS自定义该类
希望这能解决您的一些问题:) 以下是我想到的代码:
<?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;?>
这不是有史以来最优雅的解决方案,但至少它满足了我的要求。唯一可以改进此功能的实际功能是保持菜单项的顺序,同时仍然允许子菜单。此代码删除带有子菜单的菜单项并将其移到顶部。我想不出任何其他方法来实现这一点。这并不能完全回答我的问题……我在这里的需求非常具体,需要以不同的方式显示第二和第三级的子页面。此代码不适用于此。