Obține doar categoriile de nivel superior folosind get_categories() fără bucla foreach

28 dec. 2013, 20:47:00
Vizualizări: 33.7K
Voturi: 7

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?

2
Comentarii

am votat în jos pentru că Codex-ul http://codex.wordpress.org/Function_Reference/get_categories ar fi trebuit să-ți dea răspunsul

Michael Michael
29 dec. 2013 02:01:58

@Michael Nu pot să votez în jos comentariul tău. :( Dacă aș fi putut, cred că nu ai fi reușit să subliniezi acest lucru. :(

Mayeenul Islam Mayeenul Islam
29 dec. 2013 08:32:40
Toate răspunsurile la întrebare 3
0
14

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.

28 dec. 2013 21:20:18
0

setează parent la 0

$args = array(
  'parent' => 0,          // Categorie părinte - 0 înseamnă că sunt categorii de nivel superior
  'hide_empty' => 0       // Afișează și categoriile goale (fără postări)
);
3 oct. 2014 17:21:39
0

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;
18 sept. 2019 19:18:12