Obține doar categoriile de nivel superior folosind get_categories() fără bucla foreach
O întrebare foarte simplă: Iată codul meu 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 // pentru a obține doar categoriile de nivel superior
);
?>
<?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>
După o căutare îndelungată am găsit modalitatea de a accesa obiectul stdClass fără bucla foreach și vreau să continui în acest fel. Dar vreau doar categoriile de nivel superior, fără subcategorii.
Cum pot modifica argumentul aici?

Folosește get_terms
cu un argument parent
. De pe pagina Codex pentru acea funcție, sublinierea este a mea:
parent (întreg) Obține copiii direcți ai acestui termen (doar termenii al căror părinte explicit este această valoare). Dacă se trece 0, sunt returnați doar termenii de nivel superior. Valoarea implicită este un șir gol.
Netestat, dar ar trebui să funcționeze.
$categories = get_terms(
'category',
array('parent' => 0)
);
Desigur, trebuie să adaugi orice alte argumente necesare.

O soluție WordPress nativă pentru a returna categoria părinte CURENTĂ.
Nu este nevoie să folosești foreach în afara funcției...
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;
}
}
}
}
//dacă ai mai mult de două categorii părinte asociate postării, poți șterge cele pe care nu le dorești aici
$dont_return_these = array(
'retete','enciclopedic'
);
//folosește funcția astfel:
echo primary_categories($dont_return_these);
Comentarii:
- dacă ai doar o singură categorie părinte per post, folosește null în loc de array
- dacă dorești alt output în loc de slug, modifică această linie: return $primary_category->slug;
