所以我一直在网上搜索一些我认为很容易实现的东西,我很可能是想得太多了。我已经找到了许多关于这个问题的相关文章,但似乎无法将其应用到我的场景中。我的网站上有一个侧边栏菜单,显示一层子页面。因此,如果单击“服务”,侧栏会显示
服务1、服务2、服务3、服务4、服务5非常完美,因为这是我在“服务”下面的5个子页。现在,“服务1、2和3”下有5-15个子页面。我想实现的是,如果单击侧栏中的“Service 1”,页面加载,侧栏将调整为显示:
服务1—子页1—子页2—子页3—服务2—服务3—服务4—服务5—因此,在第三层页面上,我仍然希望侧栏显示主要的子服务链接,但如果您位于具有自己子页的子服务页面上,我希望它显示这些子页以及原始的主服务子页。
目前我只能看到这样的节目:
单击“Service 1”,侧栏菜单反映:-Service 1--sub page 1--sub page 2--sub page 3-Service 2-Service 3-Service 4-Service 5
这很好,但是如果我点击其中一个“子页面”,菜单就会更新,只显示该服务的子页面,而不是之前的菜单结构。
抱歉发了这么长的帖子。我使用自定义助行器尝试了此链接:http://wordpress.mfields.org/2010/selective-page-hierarchy-for-wp_list_pages/ 我也尝试过:
<ul class="sidebar_menu">
<?php wp_list_pages( array(\'title_li\'=>\'\',\'include\'=>get_post_top_ancestor_id()) ); ?>
<?php wp_list_pages( array(\'title_li\'=>\'\',\'depth\'=>1,\'child_of\'=>get_post_top_ancestor_id()) ); ?>
</ul>
不过运气不好。谢谢你的帮助!编辑:还尝试了以下操作(直到达到第三层,然后删除子页的“第二”层。)
<?php
$ancestor_id=$post->post_parent;
$descendants = get_pages(array(\'child_of\' => $ancestor_id));
$incl = "";
foreach ($descendants as $page) {
if (($page->post_parent == $ancestor_id) ||
($page->post_parent == $post->post_parent) ||
($page->post_parent == $post->ID))
{
$incl .= $page->ID . ",";
}
}
?>
<ul>
<?php wp_list_pages(array(
"child_of" => $ancestor_id,
"include" => $incl,
"link_before" => "",
"title_li" => "",
"sort_column" => "menu_order"
));
?>
</ul>
SO网友:Michael Ecklund
您之后全球$post
, 您可以使用核心WordPress功能get_post_ancestors()
检索父页。
Example
$ancestors = get_post_ancestors($post);
if($ancestors){
foreach(array_reverse($ancestors) as $post_id){
$ancestor_page = get_post($post_id);
}
}
然后,要检索当前页面的所有子页面,可以通过使用自定义函数来简化。在当前活动主题中放置自定义函数
functions.php
文件
Example
if(!function_exists(\'mbe_get_post_children\')){
function mbe_get_post_children($object){
$data = array();
$query = new WP_Query(array(
\'posts_per_page\' => \'-1\',
\'post_type\' => $object->post_type,
\'post_status\' => \'publish\',
\'post_parent\' => $object->ID
));
wp_reset_query();
wp_reset_postdata();
if(!$query->posts){
return false;
}
foreach($query->posts as $child_post){
$data[] = $child_post;
if($child_post->post_parent != $object->ID && $child_post->post_parent != 0){
mbe_get_post_children($child_post);
}
}
return $data;
}
}
然后使用自定义函数检索当前页面的所有子页面,这与第一个示例非常相似,该示例检索当前页面的所有父页面。
Example
if(function_exists(\'mbe_get_post_children\')){
$children = mbe_get_post_children($post);
if($children){
foreach($children as $child_id){
$child_page = get_post($child_id);
}
}
}