WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
Ильяс Фаизов
4 года назад
  • 0
    Kama7199

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

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

    Сергей 1.5 года назад

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

    Kama 1.5 года назад

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

    Sergs 1.4 года назад

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

    Kama 1.4 года назад

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

    Антон 9 мес назад

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

    Kama 8 мес назад

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

    Ярослав 5 мес назад

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

    Kama 5 мес назад

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

    Павел 7 дней назад

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

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

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

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

        <?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 7 дней назад

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

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

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

    $child_cat_id = 208;
    $ancestors = get_ancestors( $child_cat_id, 'category' );
    $top_parent_cat_id = end( $ancestors );
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация