How to exclude parent category but show child categories?

I figured out how to exclude the current post from displaying in my single-post view sidebar, but now I want to exclude parent categories and display only children. Any ideas how to do this? Much obliged!!

<div id="sidebar" class="grid_4">
<div class="item portfolio"><hr></hr>
    <h4>Similar Items</h4>
<?php
    if ( is_single() ) {
    $cats = wp_get_post_categories($post->ID);
    if ($cats) {
    $first_cat = $cats[0];
    $args=array(
      'cat' => $first_cat, //cat__not_in wouldn't work
      'post__not_in' => array($post->ID),
         'showposts'=>8,
      'caller_get_posts'=>1
);
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      echo '';
      while ($my_query->have_posts()) : $my_query->the_post(); ?>

<?php if (in_category('15')) continue; ?>

<div ID="similarentry"><ul>
            <li ID="similarthmb"><?php get_the_image( array( 'custom_key' => array( 'thumbnail' ), 'default_size' => 'thumbnail', 'width' => '119', 'height' => '75', 'link_to_post' => true ) ); ?></li>
            <li ID="similarttl"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title() ?></a></li>
        </ul></div>
       <?php
      endwhile;
    } //if ($my_query)
  } //if ($cats)
  wp_reset_query();  // Restore global post data stomped by the_post().
} //if (is_single())
?>
</div></div>

Related posts

Leave a Reply

3 comments

  1. I spent almost two months building and debugging Total Widget Control to do exactly this for all of a sites widgets. Bear with me as I strip the code out of Total Widget Control and try to make it usable for you.

        global $wp_query
        $twc_menu_item_object = $wp_query->object_id; //is the object id of the current page.
        $objects['menu-item-object'] = ''; //the object id of the tax to display under
    
        if ( taxonomy_exists($twc_menu_item_object) && isset($objects['menu-item-object']) )
        {
            foreach ($objects['menu-item-object'] as $menu_id => $menu_type)
            {
                if ( $menu_type != $twc_menu_item_object ) continue;
                if ( !cat_is_ancestor_of( $menu_id, $object_id ) ) continue;
                return true;
            }
        }
         return false;
    
  2. Comments inline:

    <?php
         global $wp_query;
        //* first let's get current post parent category ID
    
        $ID = $wp_query->posts[0]->ID; //* get current post ID
        $postcat = get_the_category($ID); //* based on post ID, get current post categories IDs -> WP function returns array of stdClass Objects, one stdClass Object for each category; if there is child - parent relationship, first it will return Objects for children categories and than for parents -> add "print_r ($postcat);" without quotation marks in next row to see content of array
        $cat = $postcat[0]->cat_ID; //* get first category ID from first Object in $postcat array (if post has children categories, it will get first child ID, else it will get first category ID)
        $thiscat = get_category ($cat); //* get array of category objects for $cat (current) category -> add "print_r ($thiscat);" without quotation marks in next row to see content of array
        $parent = $thiscat->category_parent; //* and extract parent category ID; if category has no parent category (and parent category has no parent), ID = 0
    
        //* now we have current category parent ID No, or if category has no children ID = 0
        //* let's check if we heave categroy with children categories or not
    
        if ($parent == 0) //* if parent ID = 0, it is category without parent category    
            {} //* do nothing 
    
        else { //* else, if it has children categories
    
            $subcategories = get_categories('child_of='.$parent); //* get array of children categories Objects and
    
            $items=''; //* create new ArrayObject and
    
                foreach($subcategories as $subcat) { //* foreach child category in array
                    if($thiscat->term_id == $subcat->term_id) //* check if current category ID is same as child category ID
                    $current = ' current-cat'; //* if true, add current-cat to li class
                    else $current = ''; //* if not, add nothing
    
                    $items .= '
                    <li class="cat-item cat-item-'.$subcat->term_id.$current.'"> <!-- if is child current, add here .current-cat //-->
                        <a href="'.get_category_link( $subcat->term_id ).'" title="'.$subcat->description.'">'.$subcat->name.' ('.$subcat->count.' posts)</a> <!-- link to -> category link, title -> category description, show -> category name and No of posts //-->
                    </li>';
                }
    
            echo "<ul>$items</ul>";
        }
    ?>
    
  3. $categories = get_categories('child_of='.INSERT_YOUR_CATEGORY_PARENT_HERE.''); 
    foreach ($categories as $category) {
        echo $category->name;
    }
    

    Editors note: INSERT_YOUR_CATEGORY_PARENT_HERE has to be replaced, else it would be seen as undefined constant and throws an Error.