web-dev-qa-db-fra.com

get_category_parents pour la taxonomie de type de publication personnalisée

Je sais que nous pouvons obtenir la catégorie parent en type de message normal en:

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

Mais comment pouvons-nous obtenir la catégorie parente dans le type de publication personnalisé?

Je l'utilise pour:

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_terms( $post->ID, 'portfolio-category' );
    $ID = $category[0]->cat_ID;
    echo '<li>'.get_category_parents( $ID, TRUE, '', FALSE ).'</li>';
}
1
elkebirmed

Réponse mise à jour:

Il existe maintenant une fonction de base depuis WordPress 4.8, permettant de répertorier les ancêtres d'un terme donné:

get_term_parents_list( 
    int $term_id, 
    string $taxonomy, 
    string|array $args = array() 
)

et get_category_parents() est un wrapper pour cette fonction avec $taxonomy en tant que 'category'.

Réponse précédente:

Voici une version modifiée que j'ai créée à partir de la fonction get_category_parents() pour prendre en charge les taxonomies générales.

/**
 * Retrieve category parents with separator for general taxonomies.
 * Modified version of get_category_parents()
 *
 * @param int $id Category ID.
 * @param string $taxonomy Optional, default is 'category'. 
 * @param bool $link Optional, default is false. Whether to format with link.
 * @param string $separator Optional, default is '/'. How to separate categories.
 * @param bool $nicename Optional, default is false. Whether to use Nice name for display.
 * @param array $visited Optional. Already linked to categories to prevent duplicates.
 * @return string
 */
function wpse85202_get_taxonomy_parents( $id, $taxonomy = 'category', $link = false, $separator = '/', $nicename = false, $visited = array() ) {

            $chain = '';
            $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 .= wpse85202_get_taxonomy_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
            }

            if ( $link )
                    $chain .= '<a href="' . esc_url( get_term_link( $parent,$taxonomy ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
            else
                    $chain .= $name.$separator;

            return $chain;
    }

Vous pouvez utiliser la fonction comme ceci:

echo wpse85202_get_taxonomy_parents($cat, $tax, TRUE, ' &raquo; ');

ou comme

echo wpse85202_get_taxonomy_parents(65, 'country', TRUE, ' &raquo; ');
0
birgire