Как вывести список записей дочерних категорий в одном шаблоне?
Вот что я хочу получить:
Моя структура категорий в админке WordPress:
Родительская категория
-Дочерняя категория 1
-Дочерняя категория 2
-Дочерняя категория 3
-Дочерняя категория 1
Вот что я хочу видеть в одном шаблоне:
Вывод списка записей из дочерних категорий родительской категории:
Дочерняя категория 1
-Запись1 Дочерней 1
-Запись2 Дочерней 1
-Запись3 Дочерней 1
-И так далее...
Дочерняя категория 2
-Запись1 Дочерней 2
-Запись2 Дочерней 2
-Запись3 Дочерней 2
-И так далее...
Дочерняя категория 3
-Запись1 Дочерней 3
-Запись2 Дочерней 3
-Запись3 Дочерней 3
-И так далее...
Кто-нибудь делал подобное раньше или есть идеи как это реализовать?
Спасибо
получить дочерние категории с помощью get_categories(); затем перебрать их в цикле foreach, используя WP_Query() :
<?php $cats = get_categories('child_of='.get_query_var('cat'));
foreach ($cats as $cat) :
$args = array(
'posts_per_page' => 3, // максимальное количество записей на категорию
'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 /* общий вывод цикла; например: */ ?>
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <br />
<?php endwhile; ?>
<?php else :
echo 'Нет записей для '.$cat->name;
endif;
endforeach; ?>

Использование wp_reset_query некорректно, эта функция предназначена для сброса основного цикла запроса, но здесь вы создали второй запрос, и вызов wp_reset_query не окажет никакого влияния на ваш $my_query.

@Hameedullah Khan спасибо за комментарий; я убрал это из кода выше. Если необходимо, нужно добавить код для сохранения оригинального запроса.

Цикл для таксономии с родительскими и дочерними элементами
$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' => __('Нет категорий'), // Translated to Russian
'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(); ?>
И 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;
}
