Вывод дочерних категорий и записей из них
Добрый день, если такая проблема, надо вывести все дочерние категории, одной родительской категории, и соответственно посты дочерних категорий.
Структура такая
Услуги(Родительская категория)
-
Дочерняя услуга 1
-
Пост 1 Дочерней услуги 1
-
Пост 2 Дочерней услуги 1
-
Пост 3 Дочерней услуги 1
-
-
Дочерняя услуга 2
-
Пост 1 Дочерней услуги 2
-
Пост 2 Дочерней услуги 2
-
Пост 3 Дочерней услуги 2
-
-
Дочерняя услуга 3
-
Пост 1 Дочерней услуги 3
-
Пост 2 Дочерней услуги 3
-
Пост 3 Дочерней услуги 3
-
Спасибо большое
В коде это будет выглядеть так: допустим ID родительской категории "Услуги" = 5, тогда получаем дочерние категории и выводим записи из них:
<?php $parent_id = 5; echo '<h2>Услуги</h2>'; # получаем дочерние рубрики $sub_cats = get_categories( array( 'child_of' => $parent_id, 'hide_empty' => 0 ) ); if( $sub_cats ){ foreach( $sub_cats as $cat ){ // Данные в объекте $cat // $cat->term_id // $cat->name (Рубрика 1) // $cat->slug (rubrika-1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taxonomy (category) // $cat->description () // $cat->parent (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat->category_description () // $cat->cat_name (Рубрика 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) echo '<h3>'. $cat->name .'</h3>'; # получаем записи из рубрики $myposts = get_posts( array( 'numberposts' => -1, 'category' => $cat->cat_ID, 'orderby' => 'post_date', 'order' => 'DESC', ) ); # выводим записи global $post; foreach($myposts as $post){ setup_postdata($post); echo '<li><a href="'. get_permalink() .'">'. get_the_title() .'</a></li>'; } } wp_reset_postdata(); // сбрасываем глобальную переменную пост }Спасибо большое,очень выручили ))))
Добрый вечер. Куда собственно вышеуказанный код вставить? Пожалуйста, подскажите.
Туда, где нужно вывести список. Это где-то в файле шаблона...
Здравствуйте, подскажите, а если выводить нужно не посты, а товары вукомерса(так же только дочерних категорий). Достаточно ли просто изменить строку в запросе с category на product_cat?
Да, достаточно.
а это только для какой-то определенной категории. А для всех можно такое использовать?
Для всех чтобы вывести получи все нужные рубрики (или любые другие таксы) с помощью get_categories() и прогони результат через foreach() как тут показано.
Подскажите, пожалуйста, как можно построить цикл таким образом чтобы выводились подкатегории первой вложенности,а не все подкатегории. То есть если у меня есь родительская категория, а в ней дочрние, а в этих дочерних еще дочерние и у них, в свою очередь, есть записи. ВОт хотелось бы как-то разбить вывод все логичнее, а не все сразу. Подскажите, пожалуйста
Пример выше выводит только первый уровень подрубрик и записи из них.
Спасибо за отличный сайт! Вопрос поэтому коду.
Как правильно поступить: когда я нахожусь в родительской категории все выводится ок, а когда попадаю в дочернию (где нет подкатегорий) то страница пустая.
Мне нужно какая то проверка, что если постов для вывода нет (так я подразумиваю дочернию) то вывести просто посты из этой (дочерней) категории.
Буду благодарен за помощь.
Я сейчас пробую так, но ничего не выходит.
Заранее спасибо!
<?php #опеределяем текущую категорию $parent_id = get_query_var('cat'); # получаем дочерние рубрики $sub_cats = get_categories( array( 'child_of' => $parent_id, 'hide_empty' => 0 ) ); if( have_posts($cat->cat_ID) ): #цикл по дочерним категориям foreach ( $sub_cats as $cat ) { # получаем записи из рубрики $myposts = get_posts( array( 'numberposts' => 3, #задаем сколько последних постов будет у рубрики 'category' => $cat->cat_ID, 'orderby' => 'post_date', 'order' => 'DESC', ) ); $query = new WP_Query('posts_per_page=-1&cat=' . $cat->cat_ID ); ?> <h3><a href="<?php echo get_category_link( $cat->cat_ID ); ?>"><?php echo $cat->cat_name; ?></a></h3> <ul> <?php foreach($myposts as $post){ setup_postdata($post); echo '<li><a href="'. get_permalink() .'">'. get_the_title() .'</a></li>'; } wp_reset_postdata(); // сбрасываем переменную $post ?> </ul> <?php } else: ТУТ НЕТ дочерних рубрик поэтому вывожу статьи из нее endif; ?>Оберни вывод из дочерних рубрик в функцию, так чтобы ей передать ID рубрики и она вывела данные из дочерних рубрик.
Далее юзай эту функцию если дочерние рубрики есть, там передаешь ID текущей рубрики.
А если их нет, то получает ID родительской рубрики, передаешь этот ID в функцию. Получить ID родительской рубрики можно так:
Час добрый! Подскажите пожалуйста как сделать вывод дочерних рубрик и постов в родительской рубрике на одной странице... Т.е. структура примерно такая:
ВЫВОДИМАЯ РУБРИКА
— ПОДРУБРИКА 1
— ПОДРУБРИКА 2
— ПОДРУБРИКА 3
— ПОДРУБРИКА 4
— ПОСТ 1
— ПОСТ 2
— ПОСТ 3
— ПОДРУБРИКА 5
— ПОДРУБРИКА 6
— ПОСТ 4
— ПОСТ 5
Т.е. нужно вывести ссылки и на подрубрики и на посты, которые содержаться ТОЛЬКО!!! в родительской рубрике... Порядок, неважен... В принципе логично сначала подрубрики, потом - посты... Но как?
Делал так: //всю html-разметку пропускаю
$this_term = get_queried_object(); foreach ( $terms as $term ): echo ($term->name); echo $term->description; endforeach; // здесь, вроде как выводятся рубрики, все работает. Далее стартую классический WP-цикл вывода постов: if ( have_posts() ) { while (have_posts()) : the_post(); the_title(); } // Здесь должны, по идее, вывалиться заголовки постов с 1 по 5, но вываливаются почему-то только заголовки последней дочерней рубрики (ПОДРУБРИКА 6)...Подскажите пожалуйста, где косяк? Уже просто даже не знаю как это заставить работать...
СПАСИБО!
А если рубрик много, что для каждой создавать шаблон и указывать ID по ходу это уже устаревает, вот для таких вещей нужен уже универсальный вывод, который будет определять в какой записи ты находишься, определение рубрики и вывод постов, которые относятся даже не к главной, а к дочерней, т.е. цепочка. Вот это было бы интересно увидеть.
значит мы увидим список