Выводим все категории и подкатегории товаров на страницу

Для вывода всех категорий и подкатегорий мы будем использовать такой код:

Код

<div>
						РАЗРАБОТКА ФОРМИРОВАНИЯ КАТЕГОРИЙ И ПОДКАТЕГОРИЙ ИЗ АДМИНКИ
						
							<?php
							  $taxonomy     = 'product_cat';
							  //$orderby      = 'name';
							  $show_count   = 0;      // 1 for yes, 0 for no
							  $pad_counts   = 0;      // 1 for yes, 0 for no
							  $hierarchical = 1;      // 1 for yes, 0 for no
							  $title        = '';
							  $empty        = 0;
							  $args = array(
									 'taxonomy'     => $taxonomy,
									 'orderby'      => $orderby,
									 'show_count'   => $show_count,
									 'pad_counts'   => $pad_counts,
									 'hierarchical' => $hierarchical,
									 'title_li'     => $title,
									 'hide_empty'   => $empty
							  );
							 $all_categories = get_categories( $args );
							 foreach ($all_categories as $cat) {
								if(($cat->category_parent == 0) && ($cat->term_id <> 15)) {
									$category_id = $cat->term_id;
									echo '<br /><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
									$args2 = array(
											'taxonomy'     => $taxonomy,
											'child_of'     => 0,
											'parent'       => $category_id,
											'orderby'      => $orderby,
											'show_count'   => $show_count,
											'pad_counts'   => $pad_counts,
											'hierarchical' => $hierarchical,
											'title_li'     => $title,
											'hide_empty'   => $empty
									);
									$sub_cats = get_categories( $args2 );
									if($sub_cats) {
										foreach($sub_cats as $sub_category) {
											echo '<br /><a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>';
											//echo  $sub_category->name ;
										}
									}
								}
							}
							?>
						
					</div>

И в этом коде мы не выводим категорию "misk", мы ее отбрасываем условием.

 

Плюс пример осуществленный на сайте RussianWool

Тут нестандартный случай, потому что нам нужно было вывести категории и подкатегории с левой стороны сайта в виде раскрывающегося аккордеона.

Пример

			<div class="container-main__menu">
				<p class="container-main__menu-maintext">КАТЕГОРИИ</p>
				<div class="accordion accordion-flush" id="accordionFlushExample">
					
					<?php
					$taxonomy     = 'product_cat';
					//$orderby      = 'name';
					$show_count   = 0;      // 1 for yes, 0 for no
					$pad_counts   = 0;      // 1 for yes, 0 for no
					$hierarchical = 1;      // 1 for yes, 0 for no
					$title        = '';
					$empty        = 0;
					$args = array(
						'taxonomy'     => $taxonomy,
						'orderby'      => $orderby,
						'show_count'   => $show_count,
						'pad_counts'   => $pad_counts,
						'hierarchical' => $hierarchical,
						'title_li'     => $title,
						'hide_empty'   => $empty
					);
					$all_categories = get_categories( $args );
					foreach ($all_categories as $cat) {
						if(($cat->category_parent == 0) && ($cat->term_id <> 15)) {
							$category_id = $cat->term_id;
							?>
						
							<div class="accordion-item">
						<div class="accordion-header" id="flush-heading<? echo $cat->term_id; ?>">
						<a class="container-main__menu-mainitem" href="<? echo get_term_link($cat->slug, 'product_cat'); ?>"><? echo $cat->name; ?></a>
						<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse<? echo $cat->term_id; ?>" aria-expanded="false" aria-controls="flush-collapseOne">
						</button>
						</div>
						<div id="flush-collapse<? echo $cat->term_id; ?>" class="accordion-collapse collapse" aria-labelledby="flush-heading<? echo $cat->term_id; ?>" data-bs-parent="#accordionFlushExample">
						<div class="accordion-body">
						
							
							<?php
							$args2 = array(
								'taxonomy'     => $taxonomy,
								'child_of'     => 0,
								'parent'       => $category_id,
								'orderby'      => $orderby,
								'show_count'   => $show_count,
								'pad_counts'   => $pad_counts,
								'hierarchical' => $hierarchical,
								'title_li'     => $title,
								'hide_empty'   => $empty
							);
							$sub_cats = get_categories( $args2 );
							if($sub_cats) {
								foreach($sub_cats as $sub_category) {
									?>
									<a class="container-main__menu-item" href="<? echo get_term_link($sub_category->slug, 'product_cat'); ?>"><i class="fa-solid fa-chevron-right"></i> <? echo $sub_category->name; ?></a>
									<?
								}
							}
							?> 
						</div>
						</div>
						</div>
							<?
						}
					}
					?>

				</div>
				<div class="container-main__banner">
					<a class="container-main__banner-link" href="">
					<img class="container-main__banner-link-img" src="/wp-content/themes/russianwool/assets/images/banner.jpg" alt="">
					</a>
				</div>
			</div>

 

Плюс пример осуществленный на сайте MieleMos

Здесь выводим только подкатегории и с изображениями.

Пример

	<div class="container-002">
		<div class="container-002-content">
			<div class="container-002__items">
				
				<?php
				$taxonomy     = 'product_cat';
				$show_count   = 0;
				$pad_counts   = 0;
				$hierarchical = 1;
				$title        = '';
				$empty        = 0;
				$args = array(
					'taxonomy'     => $taxonomy,
					'orderby'      => $orderby,
					'show_count'   => $show_count,
					'pad_counts'   => $pad_counts,
					'hierarchical' => $hierarchical,
					'title_li'     => $title,
					'hide_empty'   => $empty
				);
				$all_categories = get_categories( $args );
				foreach ($all_categories as $cat) {
					if(($cat->category_parent == 0) && ($cat->term_id <> 15)) {
						$category_id = $cat->term_id;
						$args2 = array(
							'taxonomy'     => $taxonomy,
							'child_of'     => 0,
							'parent'       => $category_id,
							'orderby'      => $orderby,
							'show_count'   => $show_count,
							'pad_counts'   => $pad_counts,
							'hierarchical' => $hierarchical,
							'title_li'     => $title,
							'hide_empty'   => $empty
						);
						$sub_cats = get_categories( $args2 );
						if($sub_cats) {
							foreach($sub_cats as $sub_category) {
								$small_thumbnail_size = apply_filters( 'subcategory_archive_thumbnail_size', 'woocommerce_thumbnail' );
								$dimensions = wc_get_image_size( $small_thumbnail_size );
								$thumbnail_id = get_term_meta( $sub_category->term_id, 'thumbnail_id', true );
								$image = wp_get_attachment_image_src( $thumbnail_id, $small_thumbnail_size );
								$image = $image[0];
				?>
				<div class="container-002__items-itm">
					<div class="container-002__items-itm-info">
						<p class="container-002__items-itm-info-title"><?php echo $sub_category->name; ?></p>
						<p class="container-002__items-itm-info-text"><?php echo $sub_category->description; ?></p>
						<a class="container-002__items-itm-info-link" href="<?php echo get_term_link($sub_category->slug, 'product_cat'); ?>">Подробнее</a>
					</div>
					<div class="container-002__items-itm-image">
						<img class="container-002__items-itm-image-img" src="<?php echo esc_url($image);?>" alt="">
					</div>
				</div>
				<?php
					//echo '<br /><a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>';
							}
						}
					}
				}
				?>
				
				<!--
				<div class="container-002__items-itm">
					<div class="container-002__items-itm-info">
						<p class="container-002__items-itm-info-title">Стиральные машины<br>Miele</p>
						<p class="container-002__items-itm-info-text">Качество и надежность</p>
						<a class="container-002__items-itm-info-link" href="">Подробнее</a>
					</div>
					<div class="container-002__items-itm-image">
						<img class="container-002__items-itm-image-img" src="/wp-content/themes/mielemos/assets/images/product_001.jpg" alt="">
					</div>
				</div>
				-->
			</div>
		</div>
	</div>

 

Тройная вложенность меню

Этот вариант я использовал при разработке многоуровневого меню на сайте, тройная вложенность.

Пример

<?php
$top_menu = '';

$taxonomy     = 'product_cat';
$orderby      = 'term_order';
$show_count   = 0;      // 1 for yes, 0 for no
$pad_counts   = 0;      // 1 for yes, 0 for no
$hierarchical = 1;      // 1 for yes, 0 for no
$title        = '';
$empty        = 0;
$args = array(
	'taxonomy'     => $taxonomy,
	'orderby'      => $orderby,
	'show_count'   => $show_count,
	'pad_counts'   => $pad_counts,
	'hierarchical' => $hierarchical,
	'title_li'     => $title,
	'hide_empty'   => $empty
);
$all_categories = get_categories( $args );
foreach ($all_categories as $cat) {
	if(($cat->category_parent == 0) && ($cat->term_id <> 15)) {
		$category_id = $cat->term_id;
		$args2 = array(
			'taxonomy'     => $taxonomy,
			'child_of'     => 0,
			'parent'       => $category_id,
			'orderby'      => $orderby,
			'show_count'   => $show_count,
			'pad_counts'   => $pad_counts,
			'hierarchical' => $hierarchical,
			'title_li'     => $title,
			'hide_empty'   => $empty
		);
		$sub_cats = get_categories( $args2 );
		if($sub_cats) {
			$top_menu .= '<li class="nav-item dropdown">';
			$top_menu .= '<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-bs-toggle="dropdown" aria-expanded="false">';
			$top_menu .=  $cat->name;
			$top_menu .= '</a>';
			$top_menu .= '<ul class="dropdown-menu" aria-labelledby="navbarDropdown">';
			foreach($sub_cats as $sub_category) {
				$sub_category_id = $sub_category->term_id;
				$args3 = array(
					'taxonomy'     => $taxonomy,
					'child_of'     => 0,
					'parent'       => $sub_category_id,
					'orderby'      => $orderby,
					'show_count'   => $show_count,
					'pad_counts'   => $pad_counts,
					'hierarchical' => $hierarchical,
					'title_li'     => $title,
					'hide_empty'   => $empty
				);
				$sub_sub_cats = get_categories( $args3 );
				if($sub_sub_cats) {
					$top_menu .= '<li class="dropdown-submenu">';
					$top_menu .= '<a class="dropdown-item dropdown-toggle" href="#">';
					$top_menu .= $sub_category->name;
					$top_menu .= '</a>';
					$top_menu .= '<ul class="dropdown-menu undermenu">';
					foreach($sub_sub_cats as $sub_sub_category) {
						$top_menu .= '<li><a class="dropdown-item" href="'. get_term_link($sub_sub_category->slug, 'product_cat') .'">' . $sub_sub_category->name . '</a></li>';
					}
					$top_menu .= '</ul>';
					$top_menu .= '</li>';
				} else {
					$top_menu .= '<li><a class="dropdown-item" href="'. get_term_link($sub_category->slug, 'product_cat') .'">' . $sub_category->name . '</a></li>';					
				}
			}
			$top_menu .= '</ul>';
			$top_menu .= '</li>';
		} else {
			$top_menu .= '<li class="nav-item">';
			$top_menu .= '<a class="nav-link" href="'. get_term_link($cat->slug, 'product_cat') .'">' . $cat->name . '</a>';
			$top_menu .= '</li>';
		}
	}
}
?> 

 

Пример левого меню сделанного аккордеоном

В этом примере показано как было реализовано левое меню, разработанное мной на сайте интернет-магазина Miele.

Пример

<?php
$left_menu = '';

$taxonomy     = 'product_cat';
$orderby      = 'term_order';
$show_count   = 0;      // 1 for yes, 0 for no
$pad_counts   = 0;      // 1 for yes, 0 for no
$hierarchical = 1;      // 1 for yes, 0 for no
$title        = '';
$empty        = 0;
$args = array(
	'taxonomy'     => $taxonomy,
	'orderby'      => $orderby,
	'show_count'   => $show_count,
	'pad_counts'   => $pad_counts,
	'hierarchical' => $hierarchical,
	'title_li'     => $title,
	'hide_empty'   => $empty
);
$all_categories = get_categories( $args );
foreach ($all_categories as $cat) {
	if(($cat->category_parent == 0) && ($cat->term_id <> 15)) {
		$category_id = $cat->term_id;
		$args2 = array(
			'taxonomy'     => $taxonomy,
			'child_of'     => 0,
			'parent'       => $category_id,
			'orderby'      => $orderby,
			'show_count'   => $show_count,
			'pad_counts'   => $pad_counts,
			'hierarchical' => $hierarchical,
			'title_li'     => $title,
			'hide_empty'   => $empty
		);
		$sub_cats = get_categories( $args2 );
		if($sub_cats) {
			foreach($sub_cats as $sub_category) {
				$sub_category_id = $sub_category->term_id;
				$args3 = array(
					'taxonomy'     => $taxonomy,
					'child_of'     => 0,
					'parent'       => $sub_category_id,
					'orderby'      => $orderby,
					'show_count'   => $show_count,
					'pad_counts'   => $pad_counts,
					'hierarchical' => $hierarchical,
					'title_li'     => $title,
					'hide_empty'   => $empty
				);
				$sub_sub_cats = get_categories( $args3 );
				if($sub_sub_cats) {
					$left_menu .=  '<!--ПОДКАТЕГОРИЯ-->';
					$left_menu .=  '<div class="accordion-item">';
					$left_menu .=  '<h2 class="accordion-header" id="heading' . $cat->term_id . '">';
					$left_menu .=  '<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse' . $cat->term_id . '" aria-expanded="true" aria-controls="collapse' . $cat->term_id . '">';
					$left_menu .=  $sub_category->name;
					$left_menu .=  '</button>';
					$left_menu .=  '</h2>';
					$left_menu .=  '<div id="collapse' . $cat->term_id . '" class="accordion-collapse collapse" aria-labelledby="heading' . $cat->term_id . '" data-bs-parent="#accordionMenu">';
					$left_menu .=  '<div class="accordion-body">';
					foreach($sub_sub_cats as $sub_sub_category) {
						$left_menu .=  '<a class="accordion-body-link" href="'. get_term_link($sub_sub_category->slug, 'product_cat') .'">'. $sub_sub_category->name .'</a><br>';
					}
					$left_menu .=  '</div>';
					$left_menu .=  '</div>';
					$left_menu .=  '</div>';
					$left_menu .=  '<!--ПОДКАТЕГОРИЯ-->';
				} else {
					$left_menu .=  '<div class="accordion-body">';
					$left_menu .=  '<a class="accordion-body-link" href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a><br>';
					$left_menu .=  '</div>';
				}
			}
		}
	}
}
?>

 

Так же с моим портфолио можно ознакомиться на любой из представленной социальной сети, на своих страницах я публикую посты о своих работах, заданиях и целях.

Для связи со мной можно воспользоваться любой социальной сетью,
или написать на почту:

С моим резюме можно ознакомиться по ссылке:

© 2020-2024 Портфолио Юдина Александра г.Пенза. Все права защищены