@ToshuK

Как отобразись дочерние рубрики к которым относится запись Wordpress?

Подскажите пожалуйста, как на странице записи списком вывести дочерние рубрики, при этом чтобы дочерние рубрики выводились определенной родительской рубрики (указанной по ID).

Пример:
Есть родительская рубрика "Language" в ней есть дочерние рубрики "English", "Russian", "Ukrainian" и т.д. Запись размещена и в родительской рубрике "Language" и в дочерних "English" и "Russian", как вывести на странице записи название только дочерних рубрик, в данном случае "English" и "Russian", при этом чтобы в данном блоке выводились дочерние рубрики только родителя "Language", дочерние категории других рубрик чтобы в этом списке не выводились. Как-то по ID родителя обозначать какие подрубрики выводить.
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Вообще, по хорошему, вам нужно создать для этого дополнительные таксономии, чтобы не смешивать теплое с мягким. Это будет и выглядеть логичнее и управлять будет удобнее

Сейчас вам нужно из массива get_the_category() собрать массивы в массиве родительских категорий

$categories = get_the_category();
$out = array();
foreach ( $categories as $key => $category ) {
	$out[$category->category_parent][$category->term_id]['title'] = $category->name;
	$out[$category->category_parent][$category->term_id]['link'] = get_term_link( $category->term_id, 'category' );
}

foreach ( $out as $keyP => $cats ) {

	// пропускаем, если рубрика родительская
	if ( $key === 0 )
		continue;

	echo '<ul class="cats cats-inline">';
	foreach ( $cats as $key => $cat ) {
		echo '<li class="cats--item"><a href="' . $cat['link'] . '" class="cats--link">' . $cat['title'] . '</a></li>';
	}
	echo '</ul>';
}


Скорее всего, при выборе рубрик, вы выбираете только дочерние (Albanian, Arabic и т.д.), поэтому родительских категорий в массиве get_the_category() не будет. Если для работы они вам нужны, то id родительской категории находится в переменной $keyP. Вы можете получить для них данные с помощью get_category() в цикле или предварительно собрать список $ids и получить одним запросом:

$parents = array();
foreach ( $categories as $key => $category ) {

	//проверяем, что категория не родительская и ее нет в общем массиве
	if ( $category->category_parent !== 0 && !in_array( $category->category_parent, $parents ) ) {
		$parents[] = $category->category_parent;
	}
	
}

$args = [
	'taxonomy'      => 'category',
	'include'       => $parents,
	'fields'        => 'id=>name',
];

$terms = get_terms( $args );


Получить значения из итогового массива $terms можно по id в цикле

foreach ( $out as $keyP => $cats ) {

	if ( isset( $terms[$keyP] ) ) {
		echo $terms[$keyP];
	}

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы