Afișează toate categoriile inclusiv sub-categoriile

2 oct. 2013, 14:23:52
Vizualizări: 20.9K
Voturi: 1

Încerc să afișez o listă cu toate categoriile și sub-categoriile sub fiecare categorie principală. Am reușit să obțin o listă cu toate categoriile părinte, dar am dificultăți în a detecta dacă acestea au categorii copil și apoi să le afișez în bucla curentă. Iată codul meu până în acest moment:

$args = array(
  'orderby' => 'name',
  'parent' => 0
  );
$categories = get_categories( $args );
foreach ( $categories as $category ) {

    echo '<a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a><br />';

}

Am găsit câteva funcții aici despre cum să detectez dacă categoria are copii, dar am dificultăți în a afișa efectiv copiii (până la un nivel) sub această legătură.

Orice ajutor este apreciat, Simon

0
Toate răspunsurile la întrebare 5
0

Am o soluție foarte simplă în doar 4 linii, care afișează categoriile, subcategoriile și numărul de articole din fiecare.

$cats = get_terms('category');
foreach ($cats as $cat) {
  echo $cat->name . "<br>" . "(" . $cat->count . ")"; 
}
17 iun. 2021 18:46:08
0

Rezolvat cu următoarele:

$args = array(
  'orderby' => 'name',
  'parent' => 0
  );
$categories = get_categories( $args );
$first = true;
  foreach ($categories as $category) {
    if ( $first )
    {
        echo '<li class="title" style="border-top: 0px;"><a href="acatalog/abovegroundpools.html">'.$category->cat_name.'</a>';
        $first = false;
    }
    else
    {
        echo '<li class="title"><a href="acatalog/abovegroundpools.html">'.$category->cat_name.'</a>';
    }
    $theid = $category->term_id;
    $children = $wpdb->get_results( "SELECT term_id FROM $wpdb->term_taxonomy WHERE parent=$theid" );
        $no_children = count($children);
    if ($no_children > 0) {
        echo "<ul>";
        $args2 = array(
         'orderby' => 'name',
         'parent' => 2
         );
        $args2["parent"]=$category->term_id;
        $categories2 = get_categories( $args2 );
         foreach ($categories2 as $category2) {

            echo '<li><a href="acatalog/Inflatable-Hot-Tubs.html">'.$category2->cat_name.'</a></li>';

        }
        echo '</ul>';
    } else {
    echo '</li>';
    }

  }
 ?>
2 oct. 2013 16:19:25
0
/**
* Funcție pentru afișarea unei liste ierarhice de categorii sub formă de dropdown
* @param int $catId - ID-ul categoriei părinte
* @param string $depth - Nivelul de adâncime pentru afișare ierarhică
* @return string - Codul HTML pentru lista de categorii
*/
function my_Categ_tree($catId, $depth){
    $depth .= '-';  $output ='';
    // Argumente pentru obținerea categoriilor
    $args = 'hierarchical=1&taxonomy=category&hide_empty=0&parent=';
    $categories = get_categories($args . $catId);
    // Verificăm dacă există categorii
    if(count($categories)>0){
        foreach ($categories as $category) {
            // Marchează categoria selectată (exemplu pentru ID 22)
            $selected = ($cat->term_id=="22") ? " selected": "";
            // Adaugă opțiunea în lista dropdown
            $output .=  '<option value="'.$category->cat_ID.'" '.$selected .'>'.$depth.$category->cat_name.'</option>';
            // Recursivitate pentru subcategorii
            $output .=  my_Categ_tree($category->cat_ID,$depth);
        }
    }
    return $output;
}

// Afișează întreaga structură ierarhică începând cu categoria rădăcină
echo my_Categ_tree(0,'');
21 ian. 2015 16:08:56
1
<?php

    // Obține categorii de nivel superior și le listează
    $args = array('orderby' => 'name', 'parent' => 0);
    $categories = get_categories( $args );

    foreach ($categories as $category) {

    echo $category->cat_name . '<br>';

    $args2 = array('orderby' => 'name', 'parent' => $category->cat_ID);
    $subcategories = get_categories( $args2 );

    echo '<ul>';

    // În timp ce listează categoriile de nivel superior
    // listează și subcategoriile acestora
    foreach ($subcategories as $subcategory) {
        echo '<li>' . $subcategory->cat_name . '</li>';
    }

    echo '</ul>';

    }
?>
12 mar. 2018 21:51:18
Comentarii

Te rugăm să [editezi] răspunsul tău și să adaugi o explicație: de ce ar putea rezolva problema?

fuxia fuxia
13 mar. 2018 02:30:45
0

Dacă dorești să afișezi toate categoriile și subcategoriile unei taxonomii personalizate, folosește acest cod și asigură-te că furnizezi slug-ul taxonomiei tale.

function ow_categories_with_subcategories( $taxonomy ) {

    // Obține categoriile de top care aparțin taxonomiei furnizate (cele fără părinte)
    $categories = get_terms( 
        array(
            'taxonomy'   => $taxonomy,
            'parent'     => 0, // <-- Fără părinte
            'orderby'    => 'term_id',
            'hide_empty' => true // <!-- schimbă în false pentru a afișa și cele goale
        )
    );
    ?>
    <div>
        <?php
        // Iterează prin toate categoriile pentru a afișa fiecare categorie individuală
        foreach ( $categories as $category ) {

            $cat_name = $category->name;
            $cat_id   = $category->term_id;
            $cat_slug = $category->slug;

            // Afișează numele fiecărei categorii individuale
            echo '<h3>Categorie: ' . $cat_name . ' - ID: ' . $cat_id . ' - Slug: ' . $cat_slug  . '</h3>'; 


            // Obține toate subcategoriile care aparțin categoriei curente
            $subcategories = get_terms(
                array(
                    'taxonomy'   => $taxonomy,
                    'parent'     => $cat_id, // <-- Părintele este categoria curentă
                    'orderby'    => 'term_id',
                    'hide_empty' => true
                )
            );
            ?>
            <div>
                <?php
                // Iterează prin toate subcategoriile pentru a afișa fiecare subcategorie individuală
                foreach ( $subcategories as $subcategory ) {

                    $subcat_name = $subcategory->name;
                    $subcat_id   = $subcategory->term_id;
                    $subcat_slug = $subcategory->slug;

                    // Afișează numele fiecărei subcategorii individuale cu ID și Slug
                    echo '<h4>Subcategorie: ' . $subcat_name . ' - ID: ' . $subcat_id . ' - Slug: ' . $subcat_slug  . '</h4>';
                }
                ?>
            </div>
            <?php
        }
        ?>
    </div>
    <?php
}
ow_categories_with_subcategories( 'numele_taxonomiei_tale' );
3 ian. 2019 06:10:21