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

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

HIT

04.06.2017

2215

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; ?>

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

  • Похожие записи
  • Комментарии
  • Вложения
Подарочные сертификаты

Подарочные сертификаты

Рассмотрим такой инструмент маркетинга как подарочные сертификаты, в ракурсе продажи его электронной версии. PW WooCommerce Gift (10 000) Алгоритм следующий: создает новый тип товара PW Gift Card. В котором можно Читать далее »

Кастомный метод платежа

Кастомный метод платежа

Создадим собственный метод платежа. Это может быть простой не предусмотренный изначально в WC метод: оплата курьеру картой, квитанция и прочие. Добавление подобных способов оплаты поможет на более раннем этапе понять Читать далее »

Настройка полей заказчика

Настройка полей заказчика

При заказе товара необходимо заполнить данные покупателя (имя, телефон, адрес доставки и т.д.). В стандартном варианте поля эти несколько «раздуты», много лишнего, требуется некоторое оформление. Можно использовать плагин Saphali Woocommerce Читать далее »

/

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

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

  1. Аватар
    Lgan

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

    1. Alexandr
      Alexandr

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

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