In the WordPress Dashboard > Posts section we can view all posts based on Title and Date (by default it is organized based on recent date published).

Is it possible to organize posts based on category hierarchy view? so when I go to WordPress Dashboard > Posts I can view posts similar to below structure:

- Post title published under x parent category 
  -- Post title child of x
     -- Post title grand child of x
  -- Post title child of x
- Post title published under y parent category
  -- Post title child of y
     -- Post title grand child of y
- Post title published under z parent category 

I know this structure seems a bit strange, but this will help me to manage different posts under different categories faster and better.

I was hoping to see if there is any way (using plugins if necessary) to display posts like this in the Dashboard?

  • Plugin recommendations are off-topic here, so I assume you want to build one yourself. You could try creating a new admin page with two boxes: the one on the left would display the category tree. When you click on each category, you would ajax-fetch the relevant posts into the box on the right.
    – birgire
    Nov 27, 2015 at 9:34

1 Answer 1


you could use restrict_manage_posts to add a dropdown field to the admin bar. however this code needs refining, because terms are not presented hierarchical atm.

add_action( 'restrict_manage_posts', 'my_restrict_manage_posts' );
function my_restrict_manage_posts() {
    global $typenow;
    $taxonomy = 'your_taxonomy_name';
    if( $typenow != "page" && $typenow != "post" ){
        $filters = array($taxonomy);
        foreach ($filters as $tax_slug) {
            $tax_obj = get_taxonomy($tax_slug);
            $tax_name = $tax_obj->labels->name;
            $terms = get_terms( $tax_slug, array( 'hide_empty' => false ) );
            echo "<select name='$tax_slug' id='$tax_slug' class='postform'>";
            echo "<option value=''>Show All $tax_name</option>";
            foreach ( $terms as $term ) { 
                if ( isset( $_GET[ $tax_slug ] ) ) {
                    $get_tax_slug = $_GET[ $tax_slug ];
                } else {
                    $get_tax_slug = false;
                echo '<option value=' 
                    . $term->slug, $get_tax_slug == $term->slug ? ' selected="selected"' : '','>' 
                    . ( (int) $term->parent > 0 ? '- ' : '' ) . $term->name . '</option>'; 
            echo "</select>";

Further research: 1, 2

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.