web-dev-qa-db-fra.com

Obtenez uniquement les catégories de niveau supérieur en utilisant get_categories () sans boucle foreach

Question très simple: Voici mon code get_categories():

<?php $args = array(
    'show_option_all'   => '',
    'show_option_none'  => '',
    'orderby'           => 'ID',
    'order'             => 'ASC',
    'show_count'        => 0,
    'hide_empty'        => 0,
    'exclude'           => '1',
    'hierarchical'      => 0,
    'depth'             => 1,
    'number'            => 12
    );
?>

<?php $categories = get_categories( $args ); ?>

<div class="middle-left">
    <ul>
        <?php for( $i=0; $i<4; $i++ ) {
            echo "<li>" . $categories[$i]->{'name'} . "</li>";
        } ?>
    </ul>
</div>
<div class="middle-middle">
    <ul>
        <?php for( $i=4; $i<8; $i++ ) {
            echo "<li>" . $categories[$i]->{'name'} . "</li>";
        } ?>
    </ul>
</div>
<div class="middle-right">
    <ul>
        <?php for( $i=8; $i<12; $i++ ) {
            echo "<li>" . $categories[$i]->{'name'} . "</li>";
        } ?>
    </ul>
</div>

Après une longue recherche, j'ai compris comment entrer dans l'objet stdClass sans boucle foreach et je souhaite procéder de cette façon. Mais je ne veux que les catégories de premier niveau, pas de sous-chats.

Comment puis-je modifier l'argument ici?

4
Mayeenul Islam

Utilisez get_terms avec un argument parent. De la page du Codex pour cette fonction, soulignez le mien:

parent (entier) Obtenir les enfants directs de ce terme (uniquement les termes dont le parent explicite est cette valeur). Si 0 est passé, seuls les termes de premier niveau sont renvoyés. Default est une chaîne vide.

Non testé, mais cela devrait le faire.

$categories = get_terms( 
   'category', 
   array('parent' => 0)
);

Bien sûr, vous devez ajouter tous les autres arguments dont vous avez besoin.

11
s_ha_dum

mettre parent à 0

$args = array(
  'parent' => 0,
  'hide_empty' => 0
);
5
T.Todua