Pobierz dzieci z kategorii nadrzędnej

17

Próbuję wyświetlić wszystkie kategorie podrzędne w tej pętli, ale mam problem z kodem. To właśnie mam.

<?php $args=array('orderby' => 'name', 'order' => 'ASC');
    $categories=get_categories($args); 
    foreach ($categories as $cat) { ?>
    <dt><a href="#" class="customer-acquisitiontop" id="<?php echo $cat->slug; ?>" data-filter=".<?php echo $cat->slug; ?>"><h2><?= $cat->cat_name; ?></h2></a></dt>
    <dd><div class="services">
    <?= $categories=get_categories('parent'); ?> /*This should be the children of the parent category */
    </div>
    </dd>
<?php } ?>

Każda pomoc byłaby świetna

Chris Da Sie
źródło

Odpowiedzi:

19

Nie możesz po prostu przekazać ciągu „rodzic” get_categories. Musisz podać identyfikator rodzica.

$categories=get_categories(
    array( 'parent' => $cat->cat_ID )
);

Zauważ, że istnieją dwa podobne, ale nie równe parametry „pobierz dziecko” , których możesz użyć.

child_of (liczba całkowita) Wyświetla wszystkie kategorie, które są potomkami (tj. dzieci i wnuki) kategorii określonej na podstawie jej identyfikatora. Nie ma wartości domyślnej dla tego parametru. Jeśli parametr jest używany, parametr hide_empty ma wartość false.

rodzic (liczba całkowita) Wyświetlaj tylko te kategorie, które są bezpośrednimi potomkami (tj. tylko dzieci) kategorii określonej na podstawie jego identyfikatora. To NIE działa jak parametr „child_of”. Nie ma wartości domyślnej dla tego parametru. [W 2.8.4]

Teraz musisz przejść przez pętlę $categories. Nie możesz po prostu powtórzyć tablicy.

foreach ($categories as $c) {
    var_dump($c);
    // what you really want instead of var_dump is something to
    // to create markup-- list items maybe, For example...
    echo '<li>'.$c->cat_name.'</li>';
}
s_ha_dum
źródło
Niestety, to tylko daje mi wyjście z Array. Żadne wartości nie są pobierane.
Chris Da Sie
„Tablica” jest tym, co dzieje się, gdy próbujesz wykonać echo tablicy. Musisz zapętlić pętlę nad tablicą i wywołać echo poszczególnych elementów.
s_ha_dum
2
Możesz dodać 'hide_empty' => false. Aby wyświetlić również puste kategorie.
Floris
2

Użyj poniższego kodu w pliku archive.php. Ten kod pomoże ci:

<?php

    $term = get_queried_object();

    $children = get_terms( $term->taxonomy, array(
        'parent'    => $term->term_id,
        'hide_empty' => false
    ) );

    if ( $children ) { 
        foreach( $children as $subcat )
        {
            echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '">' . $subcat->name . '</a></li>';
        }
    }
?>
Kolejka wiolonczelowa
źródło
Proszę edytować swoje odpowiedzi i dodać wyjaśnienie: dlaczego to może rozwiązać problem?
fuxia
0

Jeśli w tablicy nie ma żadnych wartości, możesz wypróbować następujące podejście:

$last_categories = get_categories(
  array(
    'taxonomy' => 'product_cat',
    'parent' => $sub_category->cat_ID
  )
);
croppio.com
źródło