• 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?

Viewing 3 replies - 1 through 3 (of 3 total)
  • Thread Starter signalnorth

    (@signalnorth)

    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>";
    	}
    ?>
Viewing 3 replies - 1 through 3 (of 3 total)

The topic ‘Simple Code (NEED IT!): Get Sub-Categories While on Post Page’ is closed to new replies.