Cómo obtener la lista de posts de categorías hijas en una plantilla
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

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; ?>

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 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.

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

<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;
}
