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

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

HIT

04.06.2017

2927

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

Продолжаем серию интересных доработок для Woocmmerce. Выведем дату последней покупки товара У товара такого мета поля нет, нужно сопоставлять наименования (перебирая заказы). Для этого создаем запрос на перебор БД: В Читать далее »

Плагины для woocommerce (нюансы)

Плагины для woocommerce (нюансы)

Рассмотрим различные плагины дополняющие функционал woocommerce, а также различные нюансы их использования. YITH WooCommerce Wishlist Плагин для добавление в ИМ раздела Избранное. В который можно/нужно помещать товары которые могут понадобится Читать далее »

/

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

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

  1. Lgan

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

    1. Alexandr

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

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