WordPress.org

Make WordPress Core

Ticket #8613: 8613.diff

File 8613.diff, 1.3 KB (added by Denis-de-Bernardy, 9 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}