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

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

HIT

19.10.2016

13163

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

Добавить что-либо во вкладку Детали

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

// Вывести во вкладке атрибуты поля
add_action( 'woocommerce_product_additional_information', 'add_product_compaund_field_tab', 30 );
function add_product_compaund_field_tab(){
	global $product;
	$package = get_post_meta( $product->get_id(), '_package', 1 );
	$equipment = get_post_meta( $product->get_id(), '_equipment', 1 );
	if ( !empty($package) || !empty($equipment) ) {
		
		echo '<table class="woocommerce-product-attributes shop_attributes"><tbody>';

		if ( !empty($package) ) {
		echo '<tr class="woocommerce-product-attributes-item">
			<th class="woocommerce-product-attributes-item__label">Размер в упаковке</th>
			<td class="woocommerce-product-attributes-item__value"><p>'.$package.'</p></td>
		</tr>';
		}	
		
		if ( !empty($equipment) ) {
		echo '<tr class="woocommerce-product-attributes-item">
			<th class="woocommerce-product-attributes-item__label">Комплектация</th>
			<td class="woocommerce-product-attributes-item__value"><p>'.$equipment.'</p></td>
		</tr>';			
		}

		echo '</tbody></table>';
		
	}
}

Поля будут выведены после таблицы атрибутов, причем они будут выведены в виде таблицы. Но они будут в отдельной таблице. Чтобы новые поля выводились именно в той же таблицы, нужно изменять файл woocommerce/single-product/product-attributes.php добавляя в массив $product_attributes свои значения:

$package = get_post_meta( $product->get_id(), '_package', 1 );
$equipment = get_post_meta( $product->get_id(), '_equipment', 1 );

$product_attributes['package'] = array('label' => 'Размер в упаковке', 'value' => $package);
$product_attributes['equipment'] = array('label' => 'Комплектация', 'value' => $equipment);

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

  • Похожие записи
  • Комментарии
  • Вложения
Хуки WordPress

Хуки WordPress

Хуки WordPress — важнейший элемент функционирования ядра WordPress. Хуки (зацепы) действуют следующим образом: система WP содержит множество различных хуков (фильтров и экшенов), которые являются частью структуры ядра и имеют определенную Читать далее »

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

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

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

/
Выравнивание миниатюр товаров

Выравнивание миниатюр товаров

Идеальная ситуация, когда мы загружаем изображения для товаров (хотя бы для главного изображения) квадратными. т.е. заранее подготовленными, откадрированными. Но бывают случаи, когда на сайт начинают заливаться изображения разных пропорций. Сделаем Читать далее »

/

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

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 минут.