WordPress.org

Make WordPress Core

Ticket #8613: 8613.diff

File 8613.diff, 1.3 KB (added by Denis-de-Bernardy, 5 years ago)
  • wp-admin/includes/template.php

     
    510510 
    511511        // Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache) 
    512512        $checked_categories = array(); 
     513        $move_checked = true; 
    513514        for ( $i = 0; isset($categories[$i]); $i++ ) { 
    514515                if ( in_array($categories[$i]->term_id, $args['selected_cats']) ) { 
    515                         $checked_categories[] = $categories[$i]; 
    516                         unset($categories[$i]); 
     516                        $move_checked &= !$categories[$i]->parent; 
    517517                } 
    518518        } 
     519        if ( $move_checked ) { 
     520                for ( $i = 0; isset($categories[$i]); $i++ ) { 
     521                        if ( in_array($categories[$i]->term_id, $args['selected_cats']) ) { 
     522                                $checked_categories[] = $categories[$i]; 
     523                                unset($categories[$i]); 
     524                        } 
     525                } 
    519526 
    520         // Put checked cats on top 
    521         echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); 
     527                // Put checked cats on top 
     528                echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); 
     529        } 
     530         
    522531        // Then the rest of them 
    523532        echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args)); 
    524533}