web-dev-qa-db-fra.com

Afficher uniquement les enfants de la catégorie supérieure

Imaginez que j'ai une structure d'URL comme celle-ci: www.domain.com/category/subcategory/

Ceci est mon code:

<?php
$args=array(
    'child_of' => $cat-id,
    'hide_empty' => 0,
    'orderby' => 'name',
    'order' => 'ASC'
);
$categories=get_categories($args);
foreach($categories as $category) { 
    echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>';  } 
?>

Lorsque je suis sur "www.domain.com/category/", le code affiche correctement tous les enfants de la catégorie, mais lorsqu'il est sur "www.domain.com/category/subcategory/", le code n'affiche aucun résultat La sous-catégorie n'a pas d'enfants. J'ai besoin du code pour afficher uniquement les enfants de la catégorie de niveau supérieur, même sur ses pages enfants.

Comment puis-je accomplir cela? TIA.

2
CoreyRS

Ok, essaye ça. Il doit capturer l’objet de catégorie actuel, puis remonter la chaîne jusqu’à ce qu’il trouve le plus grand ancêtre des catégories actuelles.

    // get the category object for the current category
    $thisCat = get_category( get_query_var( 'cat' ) ); 

    // if not top-level, track it up the chain to find its ancestor
    while ( intval($thisCat->parent) > 0 ) {
        $thisCat = get_category ( $thisCat->parent );
    }

    //by now $thisCat will be the top-level category, proceed as before
    $args=array(
        'child_of' => $thisCat->term_id,
        'hide_empty' => 0,
        'orderby' => 'name',
        'order' => 'ASC'
    );
    $categories=get_categories( $args );
    foreach( $categories as $category ) { 
        echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>';  } 
?>
1
helgatheviking