最后,我自己解决了。以下是解决方案:
在里面functions.php:
function show_all_children($parent_id, $post_id, $current_level)
{
$top_parents = array();
$top_parents = get_post_ancestors($post_id);
$top_parents[] = $post_id;
$children = get_posts(
array(
\'post_type\' => \'page\'
, \'posts_per_page\' => -1
, \'post_parent\' => $parent_id
, \'order_by\' => \'title\'
, \'order\' => \'ASC\'
));
if (empty($children)) return;
echo \'<ul class="children level-\'.$current_level.\'-children">\';
foreach ($children as $child)
{
echo \'<li\';
if (in_array($child->ID, $top_parents))
{
echo \' class="current_page_item"\';
}
echo \'>\';
echo \'<a href="\'.get_permalink($child->ID).\'">\';
echo apply_filters(\'the_title\', $child->post_title);
echo \'</a>\';
// now call the same function for child of this child
if ($child->ID && (in_array($child->ID, $top_parents)))
{
show_all_children($child->ID, $post_id, $current_level+1);
}
echo \'</li>\';
}
echo \'</ul>\';
}
在中
sidebar.php:
<?php
$parents_ids = get_post_ancestors($post->ID);
$top_parent_id = (count($parents_ids) > 0) ? $parents_ids[count($parents_ids)-1] : $post->ID;
show_all_children($top_parent_id, $post->ID, 1);
?>