Вывод списка категорий с постами в ВП, нужна правка кода

Robick
На сайте с 17.08.2007
Offline
173
613

Всем привет.

Есть такой код, он выводит иерархический список категорий, подкатегорий и постов.

        <?php 

$get_parent_cats = array(
'parent' => '0' //get top level categories only
);

$all_categories = get_categories( $get_parent_cats );//get parent categories

foreach( $all_categories as $single_category ){
//for each category, get the ID
$catID = $single_category->cat_ID;

echo '<li><a href=" ' . get_category_link( $catID ) . ' ">' . $single_category->name . '</a>'; //category name & link
echo '<ul class="post-title">';

$query = new WP_Query( array( 'cat'=> $catID, 'posts_per_page'=>-1 ) );
while( $query->have_posts() ):$query->the_post();
echo '<li><a href="'.get_the_permalink().'">'.get_the_title().'</a></li>';
endwhile;
wp_reset_postdata();

echo '</ul>';
$get_children_cats = array(
'child_of' => $catID //get children of this parent using the catID variable from earlier
);

$child_cats = get_categories( $get_children_cats );//get children of parent category
echo '<ul class="children">';
foreach( $child_cats as $child_cat ){
//for each child category, get the ID
$childID = $child_cat->cat_ID;

//for each child category, give us the link and name
echo '<a href=" ' . get_category_link( $childID ) . ' ">' . $child_cat->name . '</a>';

echo '<ul class="post-title">';

$query = new WP_Query( array( 'cat'=> $childID, 'posts_per_page'=>10 ) );
while( $query->have_posts() ):$query->the_post();
echo '<li><a href="'.get_the_permalink().'">'.get_the_title().'</a></li>';
endwhile;
wp_reset_postdata();

echo '</ul>';

}
echo '</ul></li>';
} //end of categories logic ?>

Проблема в том, что код выводит в списке категории все посты всех подкатегорий, при том что постам присвоена только подкатегория, а не главная категория.

Таким образом, посты дублируются в списке постов главной категории и ее подкатегории.

Задача - в списке постов главной категории выводить только те посты, к которым присвоена главная категория.

В
На сайте с 04.07.2017
Offline
23
#1

Попробуйте в аргументах WP_Query указывать id категории не через cat, а через tax_query

Там можно применить 'include_children' => false

Например:

$args = array(

'post_type' => 'post',
'posts_per_page'=> -1,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $catID,
'include_children' => false
)
)
);
$query = new WP_Query($args);

...
...
...

$args = array(
'post_type' => 'post',
'posts_per_page'=> 10,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $childID,
'include_children' => false
)
)
);
$query = new WP_Query($args);

P.S. не проверял

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий