Mostrar todas las categorías incluyendo subcategorías

2 oct 2013, 14:23:52
Vistas: 20.9K
Votos: 1

Estoy tratando de mostrar una lista de todas las categorías y subcategorías debajo de cada categoría principal. He logrado obtener una lista de todas las categorías que son padres, pero tengo dificultades para detectar si tienen hijos y mostrarlos en el bucle actual. Aquí está mi código actual:

$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 />';

}

He encontrado algunas funciones aquí sobre cómo detectar si la categoría tiene hijos, pero tengo dificultades para mostrar los hijos (hasta un nivel) debajo de este enlace.

Cualquier ayuda es muy apreciada, Simon

0
Todas las respuestas a la pregunta 5
0

Tengo soluciones muy concisas de 4 líneas, muestra las categorías y subcategorías junto con su conteo de publicaciones.

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

Resuelto con lo siguiente:

$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
function my_Categ_tree($catId, $depth){
    $depth .= '-';  $output ='';
    $args = 'hierarchical=1&taxonomy=category&hide_empty=0&parent=';    $categories = get_categories($args . $catId);
    if(count($categories)>0){
        foreach ($categories as $category) {
            $selected = ($cat->term_id=="22") ? " selected": "";
            $output .=  '<option value="'.$category->cat_ID.'" '.$selected .'>'.$depth.$category->cat_name.'</option>';
            $output .=  my_Categ_tree($category->cat_ID,$depth);
        }
    }
    return $output;
}

echo my_Categ_tree(0,'');
21 ene 2015 16:08:56
1
<?php

    // Obtener categorías principales y listarlas
    $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>';

    // Mientras se listan las categorías principales
    // listar también sus subcategorías
    foreach ($subcategories as $subcategory) {
        echo '<li>' . $subcategory->cat_name . '</li>';
    }

    echo '</ul>';

    }
?>
12 mar 2018 21:51:18
Comentarios

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué esto podría resolver el problema?

fuxia fuxia
13 mar 2018 02:30:45
0

Si deseas mostrar todas tus categorías y subcategorías de una taxonomía personalizada, utiliza este código y asegúrate de proporcionar el slug de tu taxonomía.

function ow_categories_with_subcategories( $taxonomy ) {

    // Obtener las categorías principales que pertenecen a la taxonomía proporcionada (las que no tienen padre)
    $categories = get_terms( 
        array(
            'taxonomy'   => $taxonomy,
            'parent'     => 0, // <-- Sin padre
            'orderby'    => 'term_id',
            'hide_empty' => true // <!-- cambiar a false para mostrar también las vacías
        )
    );
    ?>
    <div>
        <?php
        // Iterar a través de todas las categorías para mostrar cada categoría individual
        foreach ( $categories as $category ) {

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

            // Mostrar el nombre de cada categoría individual
            echo '<h3>Categoría: ' . $cat_name . ' - ID: ' . $cat_id . ' - Slug: ' . $cat_slug  . '</h3>'; 


            // Obtener todas las subcategorías que pertenecen a la categoría actual
            $subcategories = get_terms(
                array(
                    'taxonomy'   => $taxonomy,
                    'parent'     => $cat_id, // <-- El padre es la categoría actual
                    'orderby'    => 'term_id',
                    'hide_empty' => true
                )
            );
            ?>
            <div>
                <?php
                // Iterar a través de todas las subcategorías para mostrar cada subcategoría individual
                foreach ( $subcategories as $subcategory ) {

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

                    // Mostrar el nombre de cada subcategoría individual con ID y Slug
                    echo '<h4>Subcategoría: ' . $subcat_name . ' - ID: ' . $subcat_id . ' - Slug: ' . $subcat_slug  . '</h4>';
                }
                ?>
            </div>
            <?php
        }
        ?>
    </div>
    <?php
}
ow_categories_with_subcategories( 'el_nombre_de_tu_taxonomia' );
3 ene 2019 06:10:21