Collapsible Categories in Admin for WordPress

EDIT, 11/19/2017: Finally, I’ve built this as a plugin so that you don’t need to edit your theme to use it. If you want to easily manage large numbers of categories in the Dashboard, install the plugin, Collapsible Categories in the Dashboard. By the way, this plugin includes the functionality from the Category Checklist Tree plugin, so installing that plugin is not necessary.

The rest of this post describes the old way of adding this functionality, and the code is not as up-to-date as what is in the plugin, so I recommend the plugin. The plugin works with WooCommerce product categories. I haven’t yet tested it with custom taxonomies, but if you try it and it doesn’t work, let me know and I’ll see if I can add support and release an update.

If you have many, many categories in WordPress, it can be a pain to manage them all.  I wrote some code to do this using jQuery,  and thought I would share.  First you need to override WordPress’ default behavior for categories, which is to show the selected categories at the top, removing them from their position in the tree.  You can bypass this by installing the Category Checklist Tree plugin.  Without this plugin installed, my code will not help you much.

What my code does is to first collapse the whole categories tree, so that all subcategories are hidden, but it only does this if none of the subcategories are selected.  If a subcategory is selected, then that portion of the tree is shown in full.  My code adds “expand” and “collapse” links to the left side of each category that has subcategories.

1. Install  Category Checklist Tree plugin.

2. For version 4.0.x or lower, Download this code. For version 4.1.x or above, Download this code. Save this file to the root of your template folder and name it admin_category_stuff_js.js

2a. IF you want to hide subcategories even when the parent category is selected, then change line 10 to this:

if ($j(this).children(‘.children’).find(‘input:checked’).length == 0) {// if no subcats selected

3. In the functions.php file, add this at the end (this code will load the script whenever you are in the admin:

add_action('admin_init', 'admin_category_stuff');

function admin_category_stuff() {
$template_url = get_bloginfo('template_url');

That should do it! I welcome feedback on the code and will try to help you if you have trouble with it. I’ve tested in 3.0.x – 4.1.

Update: As of January 6, 2015 (see comment below), this code is still working in WordPress.


  1. Works perfect! Thank you so much.

  2. hi, i tried but i it doesn’t work maybe i didn’t understand will.
    first i activate the plugin then put the script file in my theme/mytemplate/
    and copy the script in function.php. but nothing happens…?

    • Chad Phillips

      It seems you have understood the steps. Which version of WordPress are you using? Nothing happens at all?

  3. works perfect in 3.2.1

  4. Owizardo

    Hi there, im on 3.4 (Beta) is it still working at that version? Let me know I would love to get this working since I got so many categories and makes it messy the way it’s left.

    • Chad Phillips

      I’ve tested in 3.3.1 and it works great. I think you’ll have good luck in 3.4 – please let me know!

  5. Thank you man! It’s working!

  6. can you make it work also for wp e-commerce product categories?

    • Chad Phillips

      To make the wp-ecommerce product categories collapsible in the admin, you’ll want to make this adjustment:
      1. Open admin_category_stuff_js.js
      2. Find this: categorychecklist (you’ll find it in three places)
      3. Replace it with this: wpsc_product_categorychecklist
      4. Upload the file and that should do it!

      Note: if you make this change, the normal categories will no longer collapse. If you want the normal admin categories and the wp-ecommerce product categories to both be collapsible, you have to do this:
      1.Open admin_category_stuff_js.js
      2. Copy everything from line 8 ( $j(‘#wpsc_product_categorychecklist li’).each( function () { //foreach li )
      through line 35 ( }); )
      3. Paste everything below line 35 but before the final closing bracket/parenthesis/semicolon.
      4. Now make the changes above but only to the lines after 35, so you’ll make three replacements just as before.
      5. Upload the file and both types of categories will be collapsible!

      Hope that helps…

  7. Amazing! That was really helpful, thank you!

  8. thanks for this code 🙂 works fine with 3.8 – seems to be broken since 3.4.
    so 10000000x thanks for this. i was looking for weeks for something like this 🙂

  9. I tried, but its not working with Version 4.0. Could you please update it?

    • Chad Phillips

      Hi James, It actually works in 4.0 and 4.1, BUT the way I had the code for the functions.php file formatted, the single quotes were being converted to fancy quotes when it was copied and pasted, which messed it up. I’ve surrounded this with code tags and it copies and pastes correctly now. Give it a whirl and let me know if you run into trouble.

  10. Zsolt Edelényi

    Great! Thank you very much!

  11. WordPress 4.1.1 show “#category-all”

  12. Decided deleted “.after (‘# category-all’)”

    • Chad Phillips

      Thanks for the heads up! I’ve made this change and added a separate download for version 4.1.x or above to my post.

  13. I can’t seem to get this working with WP 4.2.2
    The function is running and the js file is installed.
    But my category list is still huge.


    • Chad Phillips

      I’ve created a plugin for this, and there’s a link in the post you can try out.

  14. Thanks for this. I really do appreciate when people publish and share their work.
    I was not able to get this to work after hacking away at it for a while… But I did manage to finally find a plugin that works.

  15. Works perfectly.
    Thank you.

  16. Ian Coburn

    Would this work for WooCommerce categories? Thanks.

  17. Hey man, first of all, thank you. It helps a lot!

    I needed to change some js code to work on my custom categories.

    If the class name of the div’s and ul’s is not ‘category’ anymore is needed to change it in the code to.

    Thank you.

    • Chad Phillips

      You’re welcome! Glad you were able to make this work with your custom categories too.

Leave a Reply