Как вывести список записей дочерних категорий в одном шаблоне?

15 мая 2011 г., 06:02:05
Просмотры: 13.8K
Голосов: 0

Вот что я хочу получить:

Моя структура категорий в админке 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
 -И так далее...

Кто-нибудь делал подобное раньше или есть идеи как это реализовать?

Спасибо

1
Комментарии

Возможно, я не совсем правильно понял ваш вопрос. Вы хотите, чтобы записи из дочерних категорий отображались при переходе в родительскую категорию? Это то, о чем вы спрашиваете? Если да, то это уже происходит в WordPress по умолчанию. Или, может быть, вы хотите, чтобы записи отображались в порядке дочерних категорий?

Hameedullah Khan Hameedullah Khan
15 мая 2011 г. 12:34:04
Все ответы на вопрос 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; ?>
15 мая 2011 г. 10:55:23
Комментарии

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

Hameedullah Khan Hameedullah Khan
15 мая 2011 г. 12:35:02

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

Michael Michael
15 мая 2011 г. 14:05:38

Потрясающе!! Действительно отлично работает!! Вы мне очень помогли, большое спасибо, Майкл!!

idontknowhow idontknowhow
16 мая 2011 г. 17:11:42
1
-2

Цикл для таксономии с родительскими и дочерними элементами

$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 мая 2016 г. 08:28:43
Комментарии

Объясните код или дайте несколько подсказок, просто публикация кода недостаточно хороша.

bravokeyl bravokeyl
28 мая 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'   => __('Нет категорий'), // 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;
}
30 мая 2013 г. 10:42:15
Комментарии

Пожалуйста, добавьте объяснение к вашему ответу: почему это может решить проблему?

fuxia fuxia
30 мая 2013 г. 10:53:16