web-dev-qa-db-fra.com

comment obtenir les catégories pour un seul poste de manière hiérarchique

La question est simple.
Imaginez que j'ai un message nommé "Single Post" qui se trouve dans la catégorie "sous-chat" qui est un enfant de "parent-chat" qui est un enfant de "super-chat". Ce que je dois faire, c'est afficher toutes les catégories associées dans la page de publication dans l'ordre suivant:

super-cat > parent-cat > sub-cat > Single Post
1
Hamed Momeni
<?php 
    the_category( ' > ', 'multiple', $post->ID); 
    echo ' > ';
    the_title();
?> 

Cela fonctionne correctement lorsque le message est dans une seule catégorie. Mais s'il s'agit de plusieurs catégories, ou si les catégories de parents sont également sélectionnées - dans votre cas, si le message est également dans super-chat et parent-chat -, il affiche ces catégories deux fois.
Donc, cela ne va probablement pas le faire pour vous.

Je soupçonne que certains des plugins de type breadcrumb auraient pu résoudre ce problème.

1
Dominic

vous devez d'abord trier les catégories.

// get categories of post in sorted order
$categories = sortCategories(get_the_category());     

foreach($categories AS $category) {
    echo $category->name; // Plot category name
}
echo get_the_title(); // Plot post name

function sortCategories($categories) { // Sorting the category
    usort($categories, "cmpCategories");
    return $categories;
}

function cmpCategories($category_1,$category_2) { // Sort function
    foreach(get_categories(array("parent" => $category_1->cat_ID)) AS $sub) {
        if($category_2->cat_ID == $sub->cat_ID) return -1;
    }
    return 1;
}

J'espère que cela a aidé.

2
tobidude

Cela devrait faire l'affaire:

$cats = get_the_category(); //retrieve cats for post

foreach ($cats as $cat) { //go thru to find child one - means cat which has specified parent id
    if ($cat->category_parent != 0) {
        $child = $cat->term_taxonomy_id;
    }
}
echo get_category_parents( $child, TRUE, ' > ' );

Nous obtenons d’abord des catégories pour un article particulier, puis nous trouvons le dernier enfant, puis avec get_category_parents, nous obtenons l’arbre entier de ses parents ...

2
Roman

Voici ma solution de travail pour cela:

$categories = get_the_category();

$ordering = array();
foreach( $categories as $index => $cat) {
    $ordering[$cat->parent] = $index;
}

$ordered_string = "";
$i = 0;
while( $ordering[$i] !== null ){
    $ordered_string .= '<li class="item-cat"><a href="'.get_category_link( $categories[$ordering[$i]]->term_id ).'">'.$categories[$ordering[$i]]->name.'</li>';

    $i = $categories[$ordering[$i]]->term_id;
}

echo $ordered_string;

Il fait écho à la chaîne prête pour le fil d'Ariane, et avec un peu de modification, vous pouvez obtenir les catégories ordonnées sous forme de tableau.

0