@almenovr

Как сделать разделение на категории и подкатегории WooCommerce?

Надо сделать разделение категорий на сайте WooCommerce разделение как на https://www.tools.by/
Может есть какой то плагин или что то подобное. Разделить чтобы не было полотна товаров на главной странице.
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Такой список категорий сделать достаточно просто. Плагинами я практически не пользуюсь, но могу показать код, на основе которого вы сможете это реализовать

1. Для начала нам нужно сделать запрос терминов и пересобрать полученный объект в массив таким образом, чтобы родительская рубрика лежала в одном подмассиве с дочерними, т.е. чтобы у них был общий ключ

$taxonomy = 'category';
$args = [
		'taxonomy' => $taxonomy, // название таксономии с WP 4.5
		'hide_empty' => false,
];

if ( $terms = get_terms( $args ) ) {
	$output = array();
	foreach ( $terms as $key => $term ) {
		if ( $term->parent == 0 ) {
			$output[$term->term_id]['parent']['title'] = $term->name;
			$output[$term->term_id]['parent']['link'] = get_term_link( $term->term_id, $taxonomy );
		} else {
			$output[$term->parent]['children'][$key]['title'] = $term->name;
			$output[$term->parent]['children'][$key]['link'] = get_term_link( $term->term_id, $taxonomy );
		}
	}
}


2. На выходе, в переменную $output мы получаем массивы такого вида

6108f82f21835125924035.png

3. Теперь нам остается вывести все значения в нужном нам виде

if ( isset( $output ) && is_array( $output ) && !empty( $output ) ) {

	foreach ( $output as $key => $items ) {
		echo '<h2 class="title"><a href="' . $items['parent']['link'] . '" class="title-link">' . $items['parent']['title'] . '</a></h2>';
		if ( isset( $items['children'] ) ) {
			echo '<ul class="list">';
			foreach ( $items['children'] as $key => $item ) {
				echo '<li class="list-item"><a href="' . $item['link'] . '" class="list-link">' . $item['title'] . '</a></li>';
			}
			echo '</ul>';
		}
	} // end foreach

} // end if


PS. Нашел в таблице wp_options опцию category_children, в которой уже записаны связи родитель → ребенок, так что можно использовать ее и упростить код выше
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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