Simple Code (NEED IT!): Get Sub-Categories While on Post Page
-
I need a code to get the sub-categories including while I’m on that category and a post within the category. However, I only want to get the subcategory links – not the parent category.
Anybody have it?
-
I have this part of the way figured out… this displays the sub-category, but it also displays the parent category, so that’s a problem.
<?php if($post->post_parent) $children = wp_list_categories("title_li=&child_of=".$page->page_parent."&echo=0"); else $children = wp_list_categories("title_li=&child_of=".$page->ID."&echo=1"); if ($children) { ?> <ul> <?php echo $children; ?> </ul> <?php } ?></ul>And this displays perfectly, but on the category/archives page the sub-category doesn’t show.
<?php if($post->post_parent) $children = wp_list_categories("title_li=&child_of=".$page->page_parent."&echo=0"); else $children = wp_list_categories("title_li=&child_of=".$post->ID."&echo=1"); if ($children) { ?> <ul> <?php echo $children; ?> </ul> <?php } ?></ul><?php if(is_category()) { $breakpoint = 0; $thiscat = get_term( get_query_var('cat') , 'category' ); $subcategories = get_terms( 'category' , 'parent='.get_query_var('cat') ); if(empty($subcategories) && $thiscat->parent != 0) { $subcategories = get_terms( 'category' , 'parent='.$thiscat->parent.'' ); } $items=''; if(!empty($subcategories)) { foreach($subcategories as $subcat) { if($thiscat->term_id == $subcat->term_id) $current = ' current-cat'; else $current = ''; $items .= ' <li class="cat-item cat-item-'.$subcat->term_id.$current.'"> <a href="'.get_category_link( $subcat->term_id ).'" title="'.$subcat->description.'">'.$subcat->name.'</a> </li>'; } echo "<ul class='links'>$items</ul>"; } unset($subcategories,$subcat,$thiscat,$items); } ?>The code above pulls the Child Category links of the Parent category, but it only works on archive pages (Parent/Child Category). Can someone please help to also make it work when you go into a post (single.php).
Hi,
I use this code for single page with. Explanation is maybe a little big long, but it may help.TERMS USED
category = any category
parent category = category with subcategories
child category = child (subcategory) of parent categoryREMARKS
every category has parent category ID -> if category has no parent, parent ID = 0PROCEDURE
1. get current post parent category ID
2. check parent category ID -> if is 0, it is category without children
3. get subcategories
4. check which of subcategories is current and add current-cat div to it
5. format data for output
6. echo subcategory listFUNCTIONS
get_the_category () and get_category () returns stdClass Object for one, or array of stdClass Objects for many post categories and subcategories, depedens on ($args)category stdClass Object contains next category objects
[term_id] => category ID
[name] => category name
[slug] => category slug
…
[description] => category description
…
[count] => No of posts in category
…
[category_parent] => parent category ID; if category is parent, ID = 0VARIABLES
$postcat -> current post categories IDs
$cat -> post first category ID
$thiscat -> post first category objects
$parent -> post first category parent ID<?php //* 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 chlidren {} //* do nothing else { //* else, if it has children categories $subcategories = get_categories('child_of='.$parent); //* get array of children categories Objects and //* this next part is Marks (t31os) code from WP forum topic 'Showing subcategories of a parent page under subcategory' $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>"; } ?>
The topic ‘Simple Code (NEED IT!): Get Sub-Categories While on Post Page’ is closed to new replies.