Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Категории, метки и атрибуты

Товары группируют тремя способами: категории («Кружки», «Тарелки»), метки («подарок», «новинка») и атрибуты («Цвет: белый»). Всё это таксономии WordPress, а отдельное значение — категория «Кружки», цвет «белый» — называется термином.

Таксономии

ЧтоТаксономияГде в панели
Категорииproduct_cat«Товары → Категории»
Меткиproduct_tag«Товары → Метки»
Глобальный атрибут «Цвет»pa_color«Товары → Атрибуты»

Создайте в панели категорию «Кружки» с ярлыком mugs и отнесите к ней кружку.

Категории товара

// wp-content/plugins/acme-shop/includes/products.php
add_action('woocommerce_single_product_summary', function () {
    global $product;
 
    $names = wc_get_product_terms($product->get_id(), 'product_cat', ['fields' => 'names']);
 
    if ($names) {
        echo '<p>Раздел: ' . esc_html(implode(', ', $names)) . '</p>';
    }
}, 7);

Функция wc_get_product_terms() возвращает термины товара в указанной таксономии. С параметром fields => names это массив названий, без него — массив объектов WP_Term с полями term_id, name, slug. Под названием товара появится строка «Раздел: Кружки».

Проверка категории

if (has_term('mugs', 'product_cat', $product->get_id())) {
    echo '<p>Можно мыть в посудомоечной машине.</p>';
}

Функция has_term() принимает ярлык, название или идентификатор термина. Так показывают блок только для товаров одной категории.

Привязка в коде

// wp-content/plugins/acme-shop/scripts/assign-category.php
$term = wp_insert_term('Тарелки', 'product_cat', ['slug' => 'plates']);
 
$product = wc_get_product(18);
$product->set_category_ids([$term['term_id']]);
$product->save();

wp_insert_term() создаёт категорию и возвращает массив с её идентификатором. set_category_ids() заменяет список категорий товара. Для меток есть такая же пара get_tag_ids() и set_tag_ids().

Атрибуты: глобальные и собственные

Глобальный атрибут создают один раз в «Товары → Атрибуты» и используют у многих товаров; по нему можно фильтровать каталог. У атрибута с ярлыком color таксономия называется pa_color. Собственный атрибут вводят прямо в редакторе товара, и он существует только у этого товара.

Чтение атрибута

// wp-content/plugins/acme-shop/includes/products.php
add_action('woocommerce_single_product_summary', function () {
    global $product;
 
    $color = $product->get_attribute('pa_color');
 
    if ($color !== '') {
        echo '<p>Цвет: ' . esc_html($color) . '</p>';
    }
}, 21);

Метод get_attribute() возвращает значения строкой через запятую: «Белый, Синий». Он работает и для глобальных, и для собственных атрибутов. Массив значений глобального атрибута даёт wc_get_product_terms($product->get_id(), 'pa_color', ['fields' => 'names']).

Список категорий

$categories = get_terms([
    'taxonomy' => 'product_cat',
    'hide_empty' => true,
]);
 
foreach ($categories as $category) {
    printf('<a href="%s">%s</a> ', esc_url(get_term_link($category)), esc_html($category->name));
}

Код выводит ссылки на все категории, в которых есть товары. Такой блок удобно подключить к хуку woocommerce_before_shop_loop.

Частая ошибка

Глобальный атрибут ищут по имени без приставки: wc_get_product_terms($id, 'color') возвращает пустой массив. Таксономия атрибута всегда начинается с pa_. Точное имя видно в адресе страницы «Настроить термины» в «Товары → Атрибуты»: taxonomy=pa_color.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.