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 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 category
REMARKS
every category has parent category ID -> if category has no parent, parent ID = 0
PROCEDURE
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 list
FUNCTIONS
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 = 0
VARIABLES
$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>";
}
?>This topic has been closed to new replies.