WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] get_category_parents for custom post type taxonomy (3 posts)

  1. elkebirmed
    Member
    Posted 1 year ago #

    I know that we can get the parent category in normal post type by:

    get_category_parents($cat, TRUE, ' » ');

    But how can we get the parent category in custom post type?

    I use this for:

    if ( is_category() || is_single() && !is_singular( 'portfolio' ) ) {
        $category = get_the_category();
        $ID = $category[0]->cat_ID;
        echo '<li>'.get_category_parents( $ID, TRUE, '', FALSE ).'</li>';
    } elseif ( is_singular( 'portfolio' ) ) {
        $category = get_the_terms( $post->ID, 'portfolio-category' );
        $ID = $category[0]->cat_ID;
        echo '<li>'.get_category_parents( $ID, TRUE, '', FALSE ).'</li>';
    }
  2. keesiemeijer
    moderator
    Posted 1 year ago #

    I would just copy the function from core and put in your theme's functions.php. Change the function name and make changes so it gets the terms from the custom taxonomy. Something like this [untested]:

    function get_custom_category_parents( $id, $taxonomy = false, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
    
    	if(!($taxonomy && is_taxonomy_hierarchical( $taxonomy )))
    		return '';
    
    	$chain = '';
    	// $parent = get_category( $id );
    	$parent = get_term( $id, $taxonomy);
    	if ( is_wp_error( $parent ) )
    		return $parent;
    
    	if ( $nicename )
    		$name = $parent->slug;
    	else
    		$name = $parent->name;
    
    	if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
    		$visited[] = $parent->parent;
    		// $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
    		$chain .= get_custom_category_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
    	}
    
    	if ( $link ) {
    		// $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
    		$chain .= '<a href="' . esc_url( get_term_link( (int) $parent->term_id, $taxonomy ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
    	} else {
    		$chain .= $name.$separator;
    	}
    	return $chain;
    }

    Now you can call this function from your template files like this:

    <?php
    	$category = wp_get_object_terms( $post->ID, 'portfolio-category', array('fields' => 'ids') );
    	if($category)
    		echo '<li>'.get_custom_category_parents( $category[0], 'portfolio-category', TRUE, '', FALSE ).'</li>';
    ?>
  3. elkebirmed
    Member
    Posted 1 year ago #

    Thank you keesiemeijer. i already do it the easy way:

    if ( is_category() || is_single() && !is_singular( 'portfolio' ) ) { // Full path links
    		$category = get_the_category();
    		$ID = $category[0]->cat_ID;
    		echo '<li>' . get_category_parents( $ID, TRUE, '', FALSE ) . '</li>';
    	} elseif ( is_singular( 'portfolio' ) ) {
    		$category = get_the_term_list( $post->ID, 'portfolio-category', '', ', ', '' );
    		echo '<li>Portfolio: ' . $category . '</li>';
    }

    But i will try yours, i'm sure it's awesome

Topic Closed

This topic has been closed to new replies.

About this Topic