Woocommerce attribute issue
-
Привет. Данный плагин супер, но есть один минус в плане работы с WooCommerce и любыми языками кроме англ. Дело в том, что он автоматом таки переводит ВНУТРЕННИЕ атрибуты в товаре, ровно как и глобальные. Хотя не должен этого делать, ибо тогда ломается стандартный вывод вариантов товара в корзине. Т.е допустим я добавил внутренний(!) атрибут “Цвет”. По итогу он будет выводить его как tsvet. Хотя из коробки WooCommerce выводит так, как написали, ибо это не сущность.
Почему is_wc_attribute() ВСЕГДА возвращает false для внутренних атрибутов:is_wc_attribute_taxonomy() → проверяет глобальные атрибуты WooCommerce
Внутренний атрибут “цвет” → НЕ глобальный → falseis_wc_product_not_converted_attribute() → сломанная логика:
php
protected function is_wc_product_not_converted_attribute( string $title ): bool {
global $product; // ← ПРОБЛЕМА 1: часто NULLif ( ! is_a( $product, 'WC_Product' ) ) { return false; // ← Часто срабатывает здесь } $attributes = (array) get_post_meta( $product->get_id(), '_product_attributes', true ); // ... проверяет уже сохранённые атрибуты}
Почему global $product часто NULL:
При сохранении товара из админки WooCommerce не всегда устанавливает эту глобальную переменную. При AJAX-обработке атрибутов она точно не установлена
Метод вызывается из контекста sanitize_title(), а не из страницы товараИтог:
is_wc_attribute_taxonomy(“цвет”) → false
is_wc_product_not_converted_attribute(“цвет”) → false (потому что global $product = NULL)
is_wc_attribute(“цвет”) → false
transliterate(“цвет”) → “tsvet”Ошибка в коде: Метод is_wc_product_not_converted_attribute() пытается определить атрибут по уже сохранённым данным, но не учитывает, что:
НОВЫЙ атрибут ещё не сохранён
Глобальная переменная $product не установлена в нужном контексте
Надо проверять не метаполя, а $_POST данные или контекст сохранения товара
You must be logged in to reply to this topic.