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.5 года назад
  • 0
    Kama7528

    В коде это будет выглядеть так: допустим 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.5 года назад

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

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

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

    Kama 1.9 года назад

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

    Sergs 1.9 года назад

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

    Kama 1.9 года назад

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

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

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

    Kama 1.1 года назад

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

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

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

    Kama 11 мес назад

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

    Павел 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 );
    pashkaru 3 мес назад

    Добрый день!

    А как можно это сочетать с выводом кастомных полей в дочерних рубриках?

    (вот тут: https://wp-kama.ru/plugin/acf/dobavlenie-polej-k-terminam-taksonomii#vyvod-polej-opredelennogo-termina)

    Т.е. задача такая:
    Есть рубрика (каталог), в ней в подрубриках кастомные поля, которые надо вывести в списке рубрик каталога.

    Спасибо!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация