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

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

HIT

04.06.2017

3694

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 и валюта

Разбираем различные решения по работе с валютами (не мультивалютность, это отдельная тема). Курс в другой валюте Если мы торгуем на сайте в рублях, но нам нужно чтобы рядом с каждой Читать далее »

Приложить к товару файл

Приложить к товару файл

Рассмотрим какие существуют решение по добавлению к товару файлов: изображений, текстов и прочего. Customer Upload Files for WooCommerce Платное решение от Woo за 49$ (14.04.2021). Включает функционал по добавлению файла(ов) Читать далее »

Технология акций на Woocommerce

Технология акций на Woocommerce

В одном из постов я анализировал плагины для создания массовых скидок (акций). В процессе этого мною был выработан довольно универсальный алгоритм создания акций. Переделка плагина Woo Product Category Discount Woo Читать далее »

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

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

  1. Lgan

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

    1. Alexandr

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

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