WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
Ильяс Фаизов
5.8 лет назад 5
  • 0
    Kama7870

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

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

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

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

    Kama 3.2 года назад

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

    Sergs 3.1 года назад

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

    Kama 3.1 года назад

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

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

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

    Kama 2.4 года назад

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

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

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

    Kama 2.1 года назад

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

    Павел 1.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 1.7 года назад

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

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

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

    $child_cat_id = 208;
    $ancestors = get_ancestors( $child_cat_id, 'category' );
    $top_parent_cat_id = end( $ancestors );
    pashkaru 1.5 года назад

    Добрый день!

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

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

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

    Спасибо!

    Руслан месяц назад

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

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

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

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

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