/ Плагины / Иерархия по бренду

Иерархия по бренду

HIT

04.06.2017

3498

2

В woocommerce существует иерархия товаров по категории (product_cat), но не всегда этого достаточно. Создадим в woocommerce дополнительную иерархию по бренду.

Сортировка по бренду

Первым делом создаем атрибут товара Бренд и сами бренды. Для того чтобы задать брендам изображение — используем плагин taxonomy term image master.

При желании добавляем в sidebar виджет WooCommerce layered nav, который содержит функционал фильтра по выбранному атрибуту (в нашем случае бренд).

Выводим имеющиеся бренды в категориях

// Выводим бренды товаров находящихся в категории
function tutsplus_product_brends( $args = array() ) {

	if ( !is_search() ) {

		$poductcatid = get_queried_object_id();

		$args = array(
			'numberposts' => -1,
			'tax_query' => array(
				array(
					'taxonomy' => 'product_cat',
					'field' => 'id',
					'terms' => $poductcatid
				),
			),
			'post_type' => 'product'
		);

		$posts = get_posts( $args );

		foreach($posts as $post){ setup_postdata($post);

			$brends_id = wp_get_object_terms($post->ID, 'pa_brend');

			foreach ($brends_id as $brend_id) :
				$all_brends_ids[] = $brend_id->term_id;
			endforeach;

			$all_brends_unique = array_unique($all_brends_ids);

		}

		wp_reset_postdata();

		if($all_brends_unique):

		echo '<div id="brends">';

		foreach ($all_brends_unique as $brend_id) :

			$brend = get_term_by('id', $brend_id, 'brend');

			if ( $brend->term_image ):
				echo '<a href="' .get_tag_link($brend->term_id). '">';
				echo wp_get_attachment_image( $brend->term_image, 'full' );
				echo '</a>';
			endif;
		
		endforeach;

		echo '</div>';

		endif;
	
	}

}

add_action( 'woocommerce_after_shop_loop', 'tutsplus_product_brends', 50 );

Выводим бренд в карточке товара

// вывод бренда в карточке товара
function proizvoditeli_woocommerce() {

	global $post;

	echo '<div id="brand">';

	$brends_id = wp_get_object_terms($post->ID, 'pa_brend');

	foreach ($brends_id as $brend_id) :
		if ( $brend_id->term_image ):
			echo '<a href="' .get_tag_link($brend_id->term_id). '">';
			echo wp_get_attachment_image( $brend_id->term_image, 'full' );
			echo '</a>';
		endif;
	endforeach;

	echo '</div>';
	
}

add_action( 'the_woocommerce_single_title', 'proizvoditeli_woocommerce', 7 );

Таким образом из категории, либо из карточки товара. либо из произвольного меню мы попадаем в раздел бренда.

Категории Бренда

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

<?php if ( is_tax('pa_brend') ) : ?>

<div class="widget">

	<?php $termin = get_query_var( 'term' );

	$args = array( 
		'posts_per_page' => -1,
		'post_type' => 'product',
		'tax_query' => array(
			array(
				'taxonomy' => 'pa_brend',
				'field' => 'slug',
				'terms' => $termin
			),
		),
	);

	$termposts = get_posts( $args );

	foreach( $termposts as $termpost ){	setup_postdata($termpost);

		$all_cat_objects = get_the_terms( $termpost, 'product_cat' );
		if($all_cat_objects){

			foreach($all_cat_objects as $cat_object) {
				if($cat_object->count > 0) {
				$all_cat_ids[] = $cat_object->term_id;
				}
			}
		
		}

	}

	wp_reset_postdata();

	if ( $cat_object->count > 0 ): ?>

	<?php $cat_ids_unique = array_unique($all_cat_ids); ?>

	<?php //print_r ($cat_ids_unique); ?>

	<?php foreach($cat_ids_unique as $cat_id): ?>

		<?php $category = get_term( $cat_id, 'category' ); //Получаем данные по термину таксономии ?>
		<h2><a href="<?php echo site_url().'/product-category/'.$category->slug.'/?filter_brend='.$termin; ?>"><?php echo $category->name; ?></a></h2>

	<?php endforeach; ?>

	<?php endif; ?>

</div>

<?php endif; ?>

Данный код анализирует все товары в данном разделе (бренде), получает все категории к которым принадлежат товары и записывает их в уникальный массив, который в последствии мы и получаем, а также формирует специальную url-ссылку на результат фильтра по бренду.

Протестировать данное решение на подкатегориях

Возврат в категорию

Можно сделать из карточки кнопку возврата в категорию (в сайтбаре, либо в специальном месте).

<?php $term_id = wp_get_object_terms($post->ID, 'product_cat');
$term_link = get_term_link($term_id[0], 'product_cat');
echo "<a href='". $term_link ."'>Назад к выбору</a>"; ?>

Если данная кнопка будет находится в сайтбаре можно обернуть ее проверкой

<?php if ( is_product() ) : ?>
<div class="widget">

</div>
<?php endif; ?>

Список брендов

Выводим полный список брендов с ссылками на архив бренда.

<?php $terms = get_terms( array(  
	'taxonomy' => 'pa_brend', 
	'hide_empty' => true,  
	'pad_counts'=> true,  
	'orderby' => 'count',    
	'exclude' => array(755, 666, 654, 667), //если необходимо некоторые исключаем 
	'order' => 'DESC',    
	'number' => 10,    
	'parent' => $term->term_id
) 
); ?>

<?php if($terms) : ?>
<?php foreach($terms as $term) : ?>

	<a href="<?php echo get_tag_link($term->term_id);?>">
	<?php if ( $term->term_image ) { echo wp_get_attachment_image( $term->term_image, 'square' ); } ?>
	</a>

<?php endforeach; ?>
<?php endif; ?>

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Вариативный товар

Вариативный товар

Вариативный товар — один из типов товаров плагина интернет-магазина Woocommerce. Суть вариативного товара в том, что мы создаем несколько вариантов исполнения одного товара (размер, цвет, емкость и т.д.), и в Читать далее »

Добавление полей при оформлении заказа

Добавление полей при оформлении заказа

Добавляем поля для шаблона Оформление заказа Woocommerce. Стандартные поля Woocommerce делятся на 3 группы: поля оплаты (billing) поля доставки (shipping) поля аккаунта (account) Тезисно о важных моментах добавления поля: Добавляем Читать далее »

/
Лэйблы используя PHP

Лэйблы используя PHP

Как делать создание лэйблов налету средствами jQuery используя post_class описано здесь. В данной статье сделаем вывод подобных лэйблов средствами WordPress (PHP). Данный способ даст более гибкий и универсальный подход к Читать далее »

Добавить комментарий

2 комментария

  1. Lgan

    А что делать, если все вышеперечисленное реализовано уже в теме, и нужно вывести только категории, в которых есть атрибут бренд?

    1. Alexandr

      1. Перебирать все товары по признаку атрибута.
      2. Собрать в массив все категории товаров у которых этот атрибут есть.
      3. Оставить в массиве категорий только уникальные значения (категории будут повторятся).
      4. Вывести список категорий.

Иерархия по бренду
Похожие категории, термины таксономии
Рекомендации для васПохожие категории, термины таксономииOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.