Custom post template for particular category

Here is my issue: I have one parent category with many sub-categories below it, e.g.

Category 
  Sub category
        sub-sub category......
        sub-sub category......
        sub-sub category......
        sub-sub category......
        sub-sub category......
        ........

I used the WP dTree plugin to show the categories as a tree. Now I want that when I click any sub-sub category...... that it shows all the posts in that category in one custom post template.

I know how to make post template and I know when I make any post if the template file is defined the post will show that template. However I have a lot of "sub-sub category......" categories which contain many posts so it's hard to always define template for each post.

If there's any way to display all the posts in a sub-sub category...... category in one custom template, then please share with me...

Below is an example of what I'm trying to do:

Topic plugin-list-category-post Wordpress

Category Web


show all post in their parent category may be work?

<?php
$currentCatId = get_query_var('cat');
$currentCatParent = get_term_by('id', $currentCatId ,'category');
$currentCatParentId = $currentCatParent->parent;
$my_query = new WP_Query( 'cat='.$currentCatParentId );
print_r($my_query);
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();
// Do your stuff
endwhile;
endif;
?>

Here is what i do, first i add this function to my theme's functions.php file:

/**
 * Tests if any of a post's assigned categories are descendants of target categories
 *
 * @param int|array $cats The target categories. Integer ID or array of integer IDs
 * @param int|object $_post The post. Omit to test the current post in the Loop or main query
 * @return bool True if at least 1 of the post's categories is a descendant of any of the target categories
 * @see get_term_by() You can get a category by name or slug, then pass ID to this function
 * @uses get_term_children() Passes $cats
 * @uses in_category() Passes $_post (can be empty)
 * @version 2.7
 * @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category
 */
if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
    function post_is_in_descendant_category( $cats, $_post = null ) {
        foreach ( (array) $cats as $cat ) {
            // get_term_children() accepts integer ID only
            $descendants = get_term_children( (int) $cat, 'category' );
            if ( $descendants && in_category( $descendants, $_post ) )
                return true;
        }
        return false;
    }
}

then i create a function to select the correct template based on the parent category which i hook to the single_template hook ex:

add_action( 'single_template', 'post_template_selector' );
function post_template_selector($single_template) {
        global $wp_query;
        global $wp;
        if ( $wp_query->query_vars['post_type'] === 'post' ) {
                if ( have_posts()){
                        //create an array of parent category => template file name ex:
                        $cats_templates = array(
                                '12' => 'post_in_cat_12_file.php',
                                '32' => 'post_in_cat_32_file.php',
                                '56' => 'post_in_cat_56_file.php',
                        );
                        foreach ($cats_templates as $cat => $template) {
                                if (in_category($cat) || post_is_in_descendant_category($cat))
                                        return $template;
                        }
                }
        }
        return $single_template;            
}

Mind the $cats_templates array which is where you define a template X for posts under category Y.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.