В WooCommerce при работе с вариациями хорошим тоном является создание описания для вариации(для этого есть специальное поле). Но когда у вас атрибуты товара заведены через меню Товары->Атрибуты и вы там же завели описание каждого правила атрибута, имеет смысл выводить описание для вариации исходя из описания атрибута.
- Так вы избежите дублирования описаний вариации и атрибута (если описания в логике магазина не должны отличаться)
- Получите возможность поправить описание вариации сразу для всех товаров где используется данный атрибут
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/** * Вернуть описании атрибута товара по ИД вариации * @param array $available_variation массив woo с ключами * @param object $product объект товара * @param object $variation объект вариации * @return array $available_variation */ function description_product_woocommerce_variation($available_variation, $product, $variation) { $variation_description = false; //Новое описание if (is_object($product) && $product->is_type('variable') && !(empty($attributes = $variation->get_attributes()))) { $attribut_taxonomy_name = key($attributes); //Название таксономии $attribut_slug = reset(array_values($attributes)); //slug выбранной вариации if (!empty($attribut_slug)) { $terms = get_terms([//запрос для получения параметров таксаномии 'taxonomy' => $attribut_taxonomy_name, 'slug' => $attribut_slug, 'cache_domain' => md5($attribut_taxonomy_name . $attribut_slug), 'number' => 1, ]); if (!is_wp_error($terms)) { //Извлечение описания $variation_description = (!empty($terms[0]) ? $terms[0]->description : false); } } } if (!empty($variation_description)) { $available_variation['variation_description'] = $variation_description; } return $available_variation; } add_filter('woocommerce_available_variation', 'description_product_woocommerce_variation', 20, 3); |
Функция работает только если товар является вариативным.
Что она делает:
- Получает название таксономии(например это может быть pa_color) — цвет
- Получает slug из вариации(слуг нужен для получения нужной таксономии дальше)
- Делает запрос на получение данных по таксономии
- Если ошибок нет, заменяет описание вариации — описанием атрибута товара