WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
Ильяс Фаизов
9.3 года назад 6
  • 0
    Kama9601

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

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

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

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

    Kama 6.6 лет назад

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

    Sergs 6.5 лет назад

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

    Kama 6.5 лет назад

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

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

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

    Kama 5.8 лет назад

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

    Ярослав 5.5 лет назад

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

    Kama 5.5 лет назад

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

    Павел 5.1 год назад

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

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

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

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

        <?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 5.1 год назад

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

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

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

    $child_cat_id = 208;
    $ancestors = get_ancestors( $child_cat_id, 'category' );
    $top_parent_cat_id = end( $ancestors );
    Руслан 3.5 лет назад

    Добрый день, подскажите пожалуйста, как сделать подобное только сделать такую структуру:

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

    <ul
    	Дочерная услуга 1
    	Дочерная услуга 2
    	Дочерная услуга 3
    	...
    </ul>
    <div>
    	Записи дочерней услуги 1
    </div>
    <div>
    	Записи дочерней услуги 2
    </div>
    <div>
    	Записи дочерней услуги 3
    </div>

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

    Дмитрий 3.3 года назад

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

    ВЫВОДИМАЯ РУБРИКА
    — ПОДРУБРИКА 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 года назад

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

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

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

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