I'm setting up the categories for my website and I have them like so:

Original categories order

That's it, I have children of the same name but they are not interchangeable. If that bugs you just think that they have different names.

Then I go to a post and I want to add categories to it and now the tree is completely gone and the categories order is completely messed up:

categories inside post

Why is this happening? It's not always like this, sometimes the tree shows up nicely but that behaviour is not consistent. I have seen this happening countless times on other blogs and so far I've just ignored this behaviour because I (or the web admin) could identify which category is child of which parent but this is not the case because some names are repeating. Anyway even if my categories may not be the best practise, maybe for the end user is not transparent that one category is child of another one if the tree is broken like that, right?

EDIT: This is only happening when editing a post, when I add a new one everything is fine and dandy:

enter image description here

1 Answer 1


Category-list uses the function wp_terms_checklist() in wp-admin/includes/template.php on row 90. The parameter "checked_ontop" is set to true. So the checked checkboxes will be on top.

This is only happening when editing a post, when I add a new one everything is fine and dandy

Thats because when you create a post, none of the categories are checked and the list will be intact, but when you saves one it will appear on the top because of the "checked_ontop is set to true".

You can prevent this by changing the parameter checked_ontop to false by adding this to your theme function.php.

function wpse_prevent_on_top_cat() {
    // Run only in admin
    if( is_admin() && add_action('wp_terms_checklist_args', 'wpse_prevent_on_top_cat') ) {
        // Change checked_ontop to false
        $args['checked_ontop'] = false;
        // Return the new parameter
        return $args;

Or just install my simple plugin on this code: https://github.com/pontusab/WordPress-Category-List

The result:

enter image description here

  • Fantastic!!! And it's great that I don't need to hack the wordpress core por this, thank you! Commented Dec 27, 2012 at 9:08
  • Glad i could help. But hey, you should never ever hack the core! Commented Dec 27, 2012 at 9:15
  • Nah, I wasn't going to but I thought that would be the only solution if I wanted to change this issue, hence why I asked here! Commented Dec 27, 2012 at 9:19
  • Why is this restricted to is_admin()? And wouldn’t it be slightly better to use is_admin() && add_action() to add the action only when you need it?
    – fuxia
    Commented Dec 29, 2012 at 11:20
  • aah, just thought it only being active in admin so i didn't want to load it in front-end. But your right i should use is_admin && add_action. Commented Jan 2, 2013 at 9:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.