Cómo obtener la lista de posts de categorías hijas en una plantilla

15 may 2011, 06:02:05
Vistas: 13.8K
Votos: 0

Esto es lo que quiero lograr

Mi estructura de categorías en el admin de WP

Cat Padre
  -Cat Hijo 1
  -Cat Hijo 2  
  -Cat Hijo 3
  -Cat Hijo 1

Esto es lo que quiero mostrar en una plantilla:

Que muestre la lista de posts de las categorías hijas de Cat Padre

Cat Hijo 1
 -Post1 Hijo 1 
 -Post2 Hijo 1
 -Post3 Hijo 1
 -Etc... .

Cat Hijo 2
 -Post1 Hijo 2
 -Post2 Hijo 2  
 -Post3 Hijo 2
 -Etc... .

Cat Hijo 3
 -Post1 Hijo 3
 -Post2 Hijo 3
 -Post3 Hijo 3  
 -Etc... .

¿Alguien lo ha hecho antes o tiene una idea de cómo programarlo?

Gracias

1
Comentarios

Quizás no entendí tu pregunta correctamente. ¿Quieres listar las publicaciones de las categorías hijas cuando vas al listado de la categoría padre? ¿Es esto lo que estás preguntando? Si es así, esto es lo que ya sucede en WordPress por defecto. O quizás quieres que las publicaciones se listen en orden de las categorías hijas?

Hameedullah Khan Hameedullah Khan
15 may 2011 12:34:04
Todas las respuestas a la pregunta 3
3

obtener las categorías hijas, utilizando get_categories(); luego recorrerlas con un bucle foreach, usando WP_Query() :

<?php  $cats = get_categories('child_of='.get_query_var('cat')); 

    foreach ($cats as $cat) :

    $args = array(
    'posts_per_page' => 3, // número máximo de publicaciones por categoría
    'category__in' => array($cat->term_id)
    );
    $my_query = new WP_Query($args); 

        if ($my_query->have_posts()) : 
        echo '<h3>'.$cat->name.'</h3>';

        while ($my_query->have_posts()) : $my_query->the_post(); ?>     
        <?php /*salida general del bucle; por ejemplo: */ ?>
        <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>    <br />  

        <?php endwhile; ?>

        <?php else : 
        echo 'No hay publicaciones para '.$cat->name;                
        endif; 

    endforeach; ?>
15 may 2011 10:55:23
Comentarios

El uso de wp_reset_query no es correcto, se utiliza para restablecer la consulta del bucle principal, pero aquí has creado una segunda consulta y llamar a wp_reset_query no tendrá efecto en tu $my_query.

Hameedullah Khan Hameedullah Khan
15 may 2011 12:35:02

@Hameedullah Khan gracias por el comentario; lo he eliminado del código anterior. Si es necesario, habría que añadir algún código para preservar la consulta original.

Michael Michael
15 may 2011 14:05:38

¡Increíble!! ¡Funciona genial! Me ayudaste muchísimo, ¡muchas gracias Michael!!

idontknowhow idontknowhow
16 may 2011 17:11:42
1
-2

Bucle de taxonomía padre-hijo

$taxonomy = 'product_cat';
$category = get_terms($taxonomy);

echo '<ul>';

foreach( $category as $cat ){
    $link = get_term_link( $cat->slug, $taxonomy );

    if(empty($cat->parent)){
        echo '<li><a href="' . $link . '">' . $cat->name . '</a>' . '<strong>' . $cat->count . '</strong></li>';

    }
    $loop = 0;

    foreach( $category as $par ){
        $link = get_term_link( $par->slug, $taxonomy );
        if($cat->term_id == $par->parent ){

        if($loop == 0){ echo '<ul>'; }
        echo '<li><a href="' . $link . '">' . $par->name . '</a>' . $par->count . '</li>';

        $loop++;
        }
    }
    if($loop > 0){ echo '</ul>'; }

}

echo '</ul>';
28 may 2016 08:28:43
Comentarios

Explica el código o da algunos consejos, simplemente publicar código no es suficiente.

bravokeyl bravokeyl
28 may 2016 08:49:43
1
-3
<ul class="catTags">
<?php
        $args = array(
        'show_option_all'    => '',
        'orderby'            => 'count',
        'order'              => 'DESC',
        'style'              => 'list',
        'show_count'         => 0,
        'hide_empty'         => 1,
        'use_desc_for_title' => 1,
        'child_of'           => 0,
        'feed'               => '',
        'feed_type'          => '',
        'feed_image'         => '',
        'exclude'            => 1,
        'exclude_tree'       => '',
        'include'            => '',
        'hierarchical'       => 1,
        'title_li'           => __( '' ),
        'show_option_none'   => __('No hay categorías'),
        'number'             => null,
        'echo'               => 1,
        'depth'              => 2,
        'current_category'   => 0,
        'pad_counts'         => 0,
        'taxonomy'           => 'category',
        'walker'             => null    
        ); 

        wp_list_categories( $args );
    ?>
    </ul>   
    </div>

    <?php get_sidebar(); ?>

Y el CSS:

section .primary ul.catTags {
 padding:0px;
}

section .primary ul.catTags li {
 float: left;
 list-style-type: none;
 margin: 0px 20px 10px 20px;

}

section .primary ul.catTags li a,section .primary ul.catTags li a:visited {
 font-size:18px;
 text-decoration:underline;
}
section .primary ul.catTags li a:hover {
 text-decoration:none;
}
section .primary ul.catTags li ul.children {
 max-width:200px;
}
section .primary ul.catTags li ul.children li {
 margin: 0px 5px 3px 5px;
 display: inline;
}
section .primary ul.catTags li ul.children li a, section .primary ul.catTags li ul.children li a:visited {
 font-size:14px;
 text-decoration:none;
}
section .primary ul.catTags li ul.children li a:hover {
 text-decoration:underline;
}
30 may 2013 10:42:15
Comentarios

Por favor, añade una explicación a tu respuesta: ¿por qué podría eso resolver el problema?

fuxia fuxia
30 may 2013 10:53:16