--- wp-includes/post.php 2009-07-23 11:06:39.000000000 +0300 +++ wp-includes/post.php 2009-09-23 01:20:55.000000000 +0300 @@ -2147,15 +2147,30 @@ * @param array $pages List of pages' objects. * @return array */ -function &get_page_children($page_id, $pages) { +function &get_page_children($page_id, &$pages) { $page_list = array(); - foreach ( (array) $pages as $page ) { + if(is_object($pages))$p=(array)$pages; + else $p=&$pages; + $pc=count($p); + $pp=array(); + foreach ($p as $page) { if ( $page->post_parent == $page_id ) { $page_list[] = $page; - if ( $children = get_page_children($page->ID, $pages) ) - $page_list = array_merge($page_list, $children); + }else{ + $pp[]=$page; } } + $p=$pp; + $plc=count($page_list); + $page_list2=array(); + if(count($p))for($i=0;$i<$plc;$i++){ + if ($children = get_page_children($page_list[$i]->ID, $p) ) + $page_list2[$i] = $children; + if(!count($p))break; + } + if(count($page_list2))foreach($page_list2 as $i=>$children){ + array_splice($page_list,$i+1,0,$children); + } return $page_list; }