Ottenere solo le categorie di primo livello usando get_categories() senza ciclo foreach
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?

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.

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;
