/ Плагины / Атрибуты товара WC

Атрибуты товара WC

HIT

19.10.2016

11349

13

В интернет-магазине Woocommerce есть функционал атрибутов. Атрибуты товара — это дополнительные поля для различных значений. Атрибуты бывают 2-х типов: текстовый (text) и с выбором значения (select).

Архив значения атрибута

Для значений атрибутов можно задать архив, в котором будут выводится все товары с таким значением данного атрибута.
Вставляем функцию в functions.php

add_action( 'woocommerce_product_meta_end', 'cj_show_attribute_links' );

function cj_show_attribute_links() {
	global $post;
	$attribute_names = array( 'pa_atributtovara', 'pa_svojstvo-tovara' );

	foreach ( $attribute_names as $attribute_name ) {
		$taxonomy = get_taxonomy( $attribute_name );

		if ( $taxonomy && ! is_wp_error( $taxonomy ) ) {
			$terms = wp_get_post_terms( $post->ID, $attribute_name );
			$terms_array = array();
			if ( ! empty( $terms ) ) {
				foreach ( $terms as $term ) {
					$archive_link = get_term_link( $term->slug, $attribute_name );
					$full_line = '<a href="' . $archive_link . '">'. $term->name . '</a>';
					array_push( $terms_array, $full_line );
				}
				echo '<span class="attribute">' . $taxonomy->labels->name . ' ' . implode( $terms_array, ', ' ). '</span>';
			}
		}
	}
}

Необходимые к выводу атрибуты прописываем с префиксом pa_ (в функции выделено жирным)

Данная функция делает так, что атрибут с значением появляется в карточке товара под кнопкой «Добавить в корзину» на манер категорий и меток. Значение является ссылкой на архив.

При желании можно сделать, чтоб все атрибуты выводились автоматически: надо внедрить в функцию $product->get_attributes();

Если мы хотим вывести миниатюру (термина) атрибута (если атрибут например бренд — логотип), то после строки

echo '<span class="attribute">' . $taxonomy->labels->name . ' ' . implode( $terms_array, ', ' ). '</span>';

надо добавить

echo wp_get_attachment_image( $term->term_image, 'full' );

Значения атрибута в пункте меню

Чтобы добавить возможность выводить ссылки на архивы значений атрибутов в меню — добавляем следующий код:

add_filter('woocommerce_attribute_show_in_nav_menus', 'wc_reg_for_menus', 1, 2);

function wc_reg_for_menus( $register, $name = '' ) {
     if ( $name == 'pa_atributtovara' ) $register = true;
     return $register;
}

pa_atributtovara — Атрибут, значения которого можно выводить в меню.

Отключить определенный атрибут

Если нам необходимо отключить вывод конкретного атрибута, делаем это так:

function the_remove_attributes( $attributes ) {

  unset( $attributes['pa_brend'] );
  unset( $attributes['oborudovanie'] );
  unset( $attributes['shtrihkod'] );

    return $attributes;
}
add_filter( 'woocommerce_product_get_attributes', 'the_remove_attributes' );

Атрибуты товара во вкладке Дополнительная информация

Для того чтобы атрибут и значение попадали во вкладку Дополнительная информация необходимо при выборе атрибута включать checkbox Отображение на странице товаров.

При массовом добавлении значений атрибута это также можно сделать: в меню Bulk Edit в строке после выбора значения есть падающий список (нужно выбрать and set) и поставить галку в чекбоксе Visible on p. p.

Проверка — есть ли атрибут

Сделаем простую проверку — заполнен ли у данного товара определенный атрибут или нет

$protect = wp_get_object_terms($post->ID, 'pa_tolshhina'); 

if( ( $protect[0]->name ) ) {
	echo 'Атрибут есть';
} else {
	echo 'Атрибута нет';	
}

Данный код будет работать в шаблоне товара (content-single-product.php), если необходимо вызывать в другом месте — нужно подключать глобальную переменную global $post.

И еще про выводы атрибутов от WP_Panda:

Вот так выводить один атрибут без пустых терминов

$tax = 'pa_заданный_вами_слаг_атрибута'
$pa_args = get_terms( $tax, array(
		'hide_empty' => false,
    )
 );

Вывести все атрибуты без пустых терминов

$pa_args = array();
    $attribute_taxonomies = wc_get_attribute_taxonomies();
    if ( 0 !== count( $attribute_taxonomies ) ) {
        foreach ( $attribute_taxonomies as $one_tax ) {
            $pa_args[] = get_terms( $one_tax, array(
                    'hide_empty' => false,
                ) );
        }
    }

Вывести атрибуты

Каждый атрибут приходится выводить по отдельности, из-за названия таксономии атрибута.

// Выводим основные атрибуты
function enter_main_attributes() {
	global $product;
	
	echo '<table class="woocommerce-product-attributes shop_attributes shop_attributes_main">';
	
	$naznachenie = wp_get_object_terms($product->get_id(), 'pa_naznachenie');
	if (!empty($naznachenie)) {
		echo '<tr class="woocommerce-product-attributes-item">';
		foreach ($naznachenie as $item) { $naznachenie_all[] = $item->name; }
		echo '<th class="woocommerce-product-attributes-item__label"><span>Назначение</span></th>';
		echo '<td class="woocommerce-product-attributes-item__value">'.implode(', ', $naznachenie_all).'</td>';
		echo '</tr>';
	}	
	
	$upakovka = wp_get_object_terms($product->get_id(), 'pa_upakovka');
	if (!empty($upakovka)) {
		echo '<tr class="woocommerce-product-attributes-item">';		
		foreach ($upakovka as $item) { $upakovka_all[] = $item->name; }
		echo '<th class="woocommerce-product-attributes-item__label"><span>Упаковка</span></th>';
		echo '<td class="woocommerce-product-attributes-item__value">'.implode(', ', $upakovka_all).'</td>';
		echo '</tr>';		
	}
	
	echo '</table>';
}

add_action( 'woocommerce_after_single_product_summary', 'enter_main_attributes', 5 );

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

  • Похожие записи
  • Комментарии
  • Вложения
Обзор плагинов по созданию скидок

Обзор плагинов по созданию скидок

Рассмотрим различные плагины по созданию функционала скидок. Рассматриваться будут плагины которые предоставляют возможность комплексного формирования скидок на состав корзины. Практически все плагины в обзоре могут в бесплатной версии предоставить простой Читать далее »

Обзор плагинов по фильтрации товаров WC

Обзор плагинов по фильтрации товаров WC

В данном обзоре мы будем приводить сильные и слабые стороны различных плагинов по созданию фильтрации товаров WC. Причем рассмотрим как платные, так и бесплатные решения. WooCommerce Products Filter (50 000) Читать далее »

/
Акция 20% на каждый 3 и 30% на каждый 4 товар

Акция 20% на каждый 3 и 30% на каждый 4 товар

Поступила нестандартная задача, реализовать акцию 20% на каждый 3 и 30% на каждый 4 товар. Сложность заключалась в том что скидки 20% и 30% должны были действовать на товары начиная Читать далее »

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

13 комментариев

  1. Torcedor

    Здравствуйте!Как выровнять расположение сетки миниатюр товара на странице товара вровень с главной фотографией?Чтоб не было отступов ни слева ни справа. То-есть чтоб вторичные фото под главной картинкой располагались по ширине главной.

    1. Alexandr

      Самый простой и быстрый способ — задать списку миниатюр CSS свойства:
      ol.flex-control-nav.flex-control-thumbs {
      display: flex;
      justify-content: space-between;
      }

      1. Torcedor

        Скажите пожалуйста, а куда это прописать?
        В css темы попробовал — не сработало.

        1. Alexandr

          Я думаю, что родные стили WC перебивают. Попробуйте проставить стилям свойство !important. И еще важно, чтобы версия WC была как минимум 3.0, т.к. с этой версии существенно переработались стили. А я предлагаю решение именно для последней версии.

          1. Torcedor

            У меня версия 2.6.14, откатился назад до этой версии после обновления, так как не понравилась новая галерея и перевод весь слетел.
            ol.flex-control-nav.flex-control-thumbs {
            display: flex !important; 
            justify-content: space-between !important;
             
            }
             
            Не помогло, к сожалению…

          2. Alexandr

            Конечно в той версии другие стили. Посмотрите какие классы формируют список миниатюр и примените к нему стили которые я предложил. Или еще проще, сделайте как Вам нужно через Инструменты разработчика и перенесите стили в тему.

  2. Torcedor

     Я не знаю как это сделать, может Вы подскажете?
    Вот пример страницы https://glamface.ru/shop/brands/shik-brands/stojka-podstavka-dlya-xraneniya-i-sushki-kistej-dlya-makiyazha-shik/

    1. Alexandr

      Я попробовал сделать по простому (через Инструменты разработчика Google Chrome — почитайте об этом инструменте браузера), но начинает лезть верстка.. Нужно смотреть верстку и стили более глубоко. У меня, к сожалению, нет на это времени.

  3. Дмитрий

    Можно ли вывести атрибуты для простого товара в woocommerce?
    Добрый день! Дело в том, что есть товар, у которого есть 35 разных размеров, но все по одной цене. Есть ли возможность выводить атрибут размера, не переводя товар в вариативный (где как раз для всех 35 приходится вписывать одну и туже цену).
    Спасибо.

    1. Alexandr

      Вам не нужно создавать вариативный товар. Просто назначайте товару атрибуты, без галки «используется для вариаций». Атрибуты по умолчанию в woocommerce будут выводиться во вкладке «Дополнительная информация», но можно вывести где-угодно (описано в статье выше).

  4. Евгений

    Здравствуйте!
    Кто-нибудь знает, как упорядочить сами таксономии атрибутов (pa_attribute)? То есть, надо выставить их порядок в админке и чтобы они в этом же порядке выводились в карточке товара. Не путать с порядков терминов/значений внутри атрибута!
    Заранее спасибо, если кто поможет! )

  5. Serii

     А как создать такие атрибуты? https://i.imgur.com/vaWgXTR.pngЗаранее благодарен.

    1. Alexandr

      К сожалению не подскажу, не сталкивался с подобным решением.

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