WordPress.org

Forums

[resolved] "in_category()" function help (6 posts)

  1. retrobeatcom
    Member
    Posted 2 years ago #

    Hello,
    first of all i want to Thank You in advance for the help!

    And here's my question:

    On the index page i want to place a small icon next to the post name for posts that are in specific category. Lets say that i have this categories structure:

    Main Cat1
    --Sub Cat1
    --Sub Cat2
    --Sub Cat3
    Main Cat2
    Main Cat3
    etc.

    So i need all posts that are in sub-catgories 1,2 and 3 to have this icon.
    The simple solution:

    <?php if ( in_category( array(Sub Cat1 ID,Sub Cat2 ID,Sub Cat3 ID)) {echo "<img src='ICON URL'w>";} ) ?>

    But in this case i should add every new sub-catgory manually.

    I tried this:

    <?php if ( in_category(Main_Cat1 ID) {echo "<img src='ICON URL'w>";} ) ?>

    But its not working.

    If anyone can suggest a solution for this?
    Thanks!

  2. ubaidullahbutt
    Member
    Posted 2 years ago #

    Don't use in_category(), instead use is_category(), the function will absolutely work.

    Read full doc here http://codex.wordpress.org/Function_Reference/is_category.

  3. retrobeatcom
    Member
    Posted 2 years ago #

    Hi, yes i previously tried with is_category() function but with no success. I just tried again and it is not working.
    Any ideas?

  4. esmi
    Forum Moderator
    Posted 2 years ago #

    You need to use in_category().

  5. retrobeatcom
    Member
    Posted 2 years ago #

    yes - im using it nut it is not working in this case:

    CATEGORY ID1
    -SUB-CATEGORY ID2
    --POST 
    
    <?php if ( in_category( '1' ) {echo "<img src='ICON URL'w>";} ) ?>
  6. retrobeatcom
    Member
    Posted 2 years ago #

    FOUND IT!

    <?php
    /**
     * 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;
    	}
    }
    ?>

    The above code goes into the function file of the template.

    and bellow is the solution:

    <?php if ( in_category( 'maincat' ) || post_is_in_descendant_category( 1 ) ) { echo "<img src='IMG URL'>";}?>

    Thanks esmi!

Topic Closed

This topic has been closed to new replies.

About this Topic