Ottenere solo le categorie di primo livello usando get_categories() senza ciclo foreach

28 dic 2013, 20:47:00
Visualizzazioni: 33.7K
Voti: 7

Domanda molto semplice: Ecco il mio codice 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,
    'parent'            => 0 // Mostra solo le categorie di primo livello
    );
?>

<?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>

Dopo una lunga ricerca ho trovato il modo di accedere all'oggetto stdClass senza il ciclo foreach e voglio procedere in questo modo. Ma voglio solo le categorie di primo livello, nessuna sottocategoria.

Come posso modificare l'argomento in questo caso?

2
Commenti

votato negativamente perché il Codex http://codex.wordpress.org/Function_Reference/get_categories avrebbe dovuto darti la risposta

Michael Michael
29 dic 2013 02:01:58

@Michael Non posso votare negativamente il tuo commento. :( Se così fosse, temo che tu non l'abbia fatto notare. :(

Mayeenul Islam Mayeenul Islam
29 dic 2013 08:32:40
Tutte le risposte alla domanda 3
0
14

Utilizza get_terms con un argomento parent. Dalla pagina del Codex per questa funzione, enfasi mia:

parent (integer) Ottieni i figli diretti di questo termine (solo termini il cui genitore esplicito è questo valore). Se viene passato 0, vengono restituiti solo i termini di primo livello. Il valore predefinito è una stringa vuota.

Non testato, ma questo dovrebbe funzionare.

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

Ovviamente, devi aggiungere qualsiasi altro argomento di cui hai bisogno.

28 dic 2013 21:20:18
0

imposta parent a 0

$args = array(
  'parent' => 0,
  'hide_empty' => 0
);
3 ott 2014 17:21:39
0

Una soluzione nativa per WordPress per restituire la categoria genitore CORRENTE.

Non è necessario utilizzare foreach all'esterno della funzione...

function primary_categories($arr_excluded_cats) {

if($arr_excluded_cats == null) {
    $arr_excluded_cats = array();
}

$post_cats = get_the_category();

$args = array(
  'orderby' => 'name',
  'order' => 'ASC',
  'parent' => 0
);

    $primary_categories = get_categories($args);

    foreach ($primary_categories as $primary_category) {

        foreach ($post_cats as $post_cat) {
            if(($primary_category->slug == $post_cat->slug) && (!in_array($primary_category->slug, $arr_excluded_cats))) {
                return $primary_category->slug;
            }
        }
    }
}

//se hai più di due categorie genitore associate al post, puoi eliminare quelle che non vuoi qui
$dont_return_these = array(
        'receitas','enciclopedico'
    );

//usa la funzione in questo modo:
echo primary_categories($dont_return_these);

Commenti:

  • se hai solo una categoria genitore per post, passa null invece dell'array
  • se desideri un output diverso dallo slug, modifica questo in return $primary_category-> slug;
18 set 2019 19:18:12