Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую! eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
Ильяс Фаизов
11.7 лет назад 6
  • 0
    Kama 9893

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

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

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

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

    Kama 9 лет назад

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

    Sergs 9 лет назад

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

    Kama 9 лет назад

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

    Антон 8.4 года назад

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

    Kama 8.2 года назад

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

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

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

    Kama 8 лет назад

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

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

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

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

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

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

        <?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.5 лет назад

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

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

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

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

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

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

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

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

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

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