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>';
}
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, ' » ');
ou comme
echo wpse85202_get_taxonomy_parents(65, 'country', TRUE, ' » ');