Вывод дочерних категорий и записей из них

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

Услуги(Родительская категория)

  • Дочерняя услуга 1

    • Пост 1 Дочерней услуги 1

    • Пост 2 Дочерней услуги 1

    • Пост 3 Дочерней услуги 1

  • Дочерняя услуга 2

    • Пост 1 Дочерней услуги 2

    • Пост 2 Дочерней услуги 2

    • Пост 3 Дочерней услуги 2

  • Дочерняя услуга 3

    • Пост 1 Дочерней услуги 3

    • Пост 2 Дочерней услуги 3

    • Пост 3 Дочерней услуги 3

Спасибо большое

0
Ильяс Фаизов
10.1 год назад 6
  • 0
    Kama 9790

    В коде это будет выглядеть так: допустим 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(); // сбрасываем глобальную переменную пост
    }
    Ильяс Фаизов 10 лет назад

    Спасибо большое,очень выручили )mosking

    Сергей 7.5 лет назад

    Добрый вечер. Куда собственно вышеуказанный код вставить? Пожалуйста, подскажите.

    Kama 7.5 лет назад

    Туда, где нужно вывести список. Это где-то в файле шаблона...

    Sergs 7.4 года назад

    Здравствуйте, подскажите, а если выводить нужно не посты, а товары вукомерса(так же только дочерних категорий). Достаточно ли просто изменить строку в запросе с category на product_cat?

    Kama 7.4 года назад

    Да, достаточно.

    Антон 6.7 лет назад

    а это только для какой-то определенной категории. А для всех можно такое использовать?

    Kama 6.6 лет назад

    Для всех чтобы вывести получи все нужные рубрики (или любые другие таксы) с помощью get_categories() и прогони результат через foreach() как тут показано.

    Ярослав 6.4 года назад

    Подскажите, пожалуйста, как можно построить цикл таким образом чтобы выводились подкатегории первой вложенности,а не все подкатегории. То есть если у меня есь родительская категория, а в ней дочрние, а в этих дочерних еще дочерние и у них, в свою очередь, есть записи. ВОт хотелось бы как-то разбить вывод все логичнее, а не все сразу. Подскажите, пожалуйста

    Kama 6.4 года назад

    Пример выше выводит только первый уровень подрубрик и записи из них.

    Павел 6 лет назад

    Спасибо за отличный сайт! Вопрос поэтому коду.
    Как правильно поступить: когда я нахожусь в родительской категории все выводится ок, а когда попадаю в дочернию (где нет подкатегорий) то страница пустая.

    Мне нужно какая то проверка, что если постов для вывода нет (так я подразумиваю дочернию) то вывести просто посты из этой (дочерней) категории.

    Буду благодарен за помощь.

    Я сейчас пробую так, но ничего не выходит.
    Заранее спасибо!

        <?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; ?>
    Kama 6 лет назад

    Оберни вывод из дочерних рубрик в функцию, так чтобы ей передать ID рубрики и она вывела данные из дочерних рубрик.

    Далее юзай эту функцию если дочерние рубрики есть, там передаешь ID текущей рубрики.

    А если их нет, то получает ID родительской рубрики, передаешь этот ID в функцию. Получить ID родительской рубрики можно так:

    $child_cat_id = 208;
    $ancestors = get_ancestors( $child_cat_id, 'category' );
    $top_parent_cat_id = end( $ancestors );
    Дмитрий 4.1 год назад

    Час добрый! Подскажите пожалуйста как сделать вывод дочерних рубрик и постов в родительской рубрике на одной странице... Т.е. структура примерно такая:

    ВЫВОДИМАЯ РУБРИКА
    — ПОДРУБРИКА 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)... 
    

    Подскажите пожалуйста, где косяк? Уже просто даже не знаю как это заставить работать...

    СПАСИБО!

    Andre 3.8 лет назад

    А если рубрик много, что для каждой создавать шаблон и указывать ID по ходу это уже устаревает, вот для таких вещей нужен уже универсальный вывод, который будет определять в какой записи ты находишься, определение рубрики и вывод постов, которые относятся даже не к главной, а к дочерней, т.е. цепочка. Вот это было бы интересно увидеть.

    - Родительская рубрика
    -- Дочерняя рубрика
    --- Запись 1
    --- Запись 2 (находимся тут)
    --- Запись 3

    значит мы увидим список

    -- Дочерняя рубрика (h3 к примеру)
    --- Запись 1 (ссылка)
    --- Запись 2 (ссылка)
    --- Запись 3 (ссылка)
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация