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

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

HIT

04.06.2017

4624

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; ?>
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Использование купонов

Использование купонов

В ранних публикациях связанных со скидками woocommerce кое где мельком упоминались купоны. Рассмотрим более подробно тему купонов woocommerce, ведь они являются мощным инструментом маркетинга интернет-магазина. Создание купона Чтобы использовать купоны Читать далее »

Сообщения woocommerce

Сообщения woocommerce

Сообщения woocommerce — система сопроводительной информации при использовании интернет-магазина. В системе есть 3 типа сообщений: информационные (notice), успешные действия (success), ошибки/предупреждения (error) Стандартные сообщения Это перечень стандартных сообщений разделенных по Читать далее »

Процесс заказа WC

Процесс заказа WC

Все что связано с процессом непосредственно заказа. Особенно после того как пользователь нажимает кнопку Оформить заказ. Редирект после оформления заказа После оформления стандартного заказа woocommerce происходит редирект на шаблон успешного Читать далее »

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

Notice: Функция WP_Styles::add вызвана неправильно. Стиль с дескриптором "editor-buttons" был поставлен в очередь с незарегистрированными зависимостями: dashicons. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.9.1.) in /home/t/tiberi6w/opttour.ru/public_html/wp-includes/functions.php on line 6260

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

  1. Lgan

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

    1. Alexandr

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

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