WordPress.org

Make WordPress Core

Ticket #5303: post.diff

File post.diff, 1.1 KB (added by mihai, 9 years ago)

fast get_page_children

  • wp-includes/post.php

     
    21472147 * @param array $pages List of pages' objects.
    21482148 * @return array
    21492149 */
    2150 function &get_page_children($page_id, $pages) {
     2150function &get_page_children($page_id, &$pages) {
    21512151        $page_list = array();
    2152         foreach ( (array) $pages as $page ) {
     2152        if(is_object($pages))$p=(array)$pages;
     2153        else $p=&$pages;
     2154        $pc=count($p);
     2155        $pp=array();
     2156        foreach ($p as $page) {
    21532157                if ( $page->post_parent == $page_id ) {
    21542158                        $page_list[] = $page;
    2155                         if ( $children = get_page_children($page->ID, $pages) )
    2156                                 $page_list = array_merge($page_list, $children);
     2159                }else{
     2160                        $pp[]=$page;
    21572161                }
    21582162        }
     2163        $p=$pp;
     2164        $plc=count($page_list);
     2165        $page_list2=array();   
     2166        if(count($p))for($i=0;$i<$plc;$i++){   
     2167                if ($children = get_page_children($page_list[$i]->ID, $p) )
     2168                        $page_list2[$i] = $children;
     2169                if(!count($p))break;
     2170        }
     2171        if(count($page_list2))foreach($page_list2 as $i=>$children){
     2172                array_splice($page_list,$i+1,0,$children);
     2173        }
    21592174        return $page_list;
    21602175}
    21612176