WordPress.org

Make WordPress Core

Ticket #9661: 9661_category.diff

File 9661_category.diff, 2.9 KB (added by hailin, 9 years ago)

revised patch again

  • C:/xampp/htdocs/wordpress_trunk/wp-admin/includes/template.php

     
    2121 * @param unknown_type $per_page
    2222 */
    2323function cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20 ) {
     24       
    2425        $count = 0;
    25         _cat_rows($categories, $count, $parent, $level, $page, $per_page);
     26       
     27        if ( empty($categories) ) {
     28               
     29                $args = array('hide_empty' => 0);
     30                if ( !empty($_GET['s']) )
     31                        $args['search'] = $_GET['s'];
     32                       
     33                $categories = get_categories( $args );
     34               
     35                if ( empty($categories) )
     36                        return false;
     37        }
     38
     39        $children = _get_term_hierarchy('category');
     40       
     41        _cat_rows( $parent, $level, $categories, $children, $page, $per_page, $count );
     42       
    2643}
    2744
    2845/**
     
    3855 * @param unknown_type $per_page
    3956 * @return unknown
    4057 */
    41 function _cat_rows( $categories, &$count, $parent = 0, $level = 0, $page = 1, $per_page = 20 ) {
    42         if ( empty($categories) ) {
    43                 $args = array('hide_empty' => 0);
    44                 if ( !empty($_GET['s']) )
    45                         $args['search'] = $_GET['s'];
    46                 $categories = get_categories( $args );
    47         }
    48 
    49         if ( !$categories )
    50                 return false;
    51 
    52         $children = _get_term_hierarchy('category');
    53 
     58function _cat_rows( $parent = 0, $level = 0, $categories, &$children, $page = 1, $per_page = 20, &$count ) {
     59       
    5460        $start = ($page - 1) * $per_page;
    5561        $end = $start + $per_page;
    56         $i = -1;
    5762        ob_start();
    58         foreach ( $categories as $category ) {
     63       
     64        foreach ( $categories as $key => $category ) {
    5965                if ( $count >= $end )
    6066                        break;
    61 
    62                 $i++;
    63 
     67                       
    6468                if ( $category->parent != $parent && empty($_GET['s']) )
    6569                        continue;
    6670
    6771                // If the page starts in a subtree, print the parents.
    6872                if ( $count == $start && $category->parent > 0 ) {
     73                       
    6974                        $my_parents = array();
    70                         while ( $my_parent) {
    71                                 $my_parent = get_category($my_parent);
     75                        $p = $category->parent;
     76                        while ( $p ) {
     77                                $my_parent = get_category( $p );
    7278                                $my_parents[] = $my_parent;
    73                                 if ( !$my_parent->parent )
     79                                if ( $my_parent->parent == 0 )
    7480                                        break;
    75                                 $my_parent = $my_parent->parent;
     81                                $p = $my_parent->parent;
    7682                        }
     83                       
    7784                        $num_parents = count($my_parents);
    7885                        while( $my_parent = array_pop($my_parents) ) {
    7986                                echo "\t" . _cat_row( $my_parent, $level - $num_parents );
     
    8491                if ( $count >= $start )
    8592                        echo "\t" . _cat_row( $category, $level );
    8693
    87                 unset($categories[$i]); // Prune the working set
     94                unset( $categories[ $key ] );
     95               
    8896                $count++;
    8997
    9098                if ( isset($children[$category->term_id]) )
    91                         _cat_rows( $categories, $count, $category->term_id, $level + 1, $page, $per_page );
    92 
     99                        _cat_rows( $category->term_id, $level + 1, $categories, $children, $page, $per_page, $count );
    93100        }
    94101
    95102        $output = ob_get_contents();