Не корректно отображается поле в карточке товара, как исправить?
Здравствуйте, помогите пожалуйста, нужно вывести описание вариации на карточку товара, у меня есть код который выводит описание, но оно не отображается.
Вот этот код отображает описание, но всех вариаций:
function test() { global $product; if ($product->is_type('variable')) { $variations = $product->get_available_variations(); foreach ($variations as $variation) { if (isset($variation['variation_description'])) { echo $variation['variation_description']; } } } } add_action('woocommerce_after_shop_loop_item', 'test'); |
function test() { global $product; if ($product->is_type('variable')) { $variations = $product->get_available_variations(); foreach ($variations as $variation) { if (isset($variation['variation_description'])) { echo $variation['variation_description']; } } } } add_action('woocommerce_after_shop_loop_item', 'test');
А этот код должен отображать только описание выбранной вариации, по веб инспектору видно что значение есть и оно меняется но на карточке оно не отображается:
function test() { global $product; if ($product->is_type('variable')) { $current_variation_id = $product->get_variation_id(); $variations = $product->get_available_variations(); foreach ($variations as $variation) { if ($current_variation_id === $variation['variation_id']) { if (isset($variation['variation_description'])) { echo $variation['variation_description']; } break; } } } } add_action('woocommerce_before_single_product', 'test', 10); |
function test() { global $product; if ($product->is_type('variable')) { $current_variation_id = $product->get_variation_id(); $variations = $product->get_available_variations(); foreach ($variations as $variation) { if ($current_variation_id === $variation['variation_id']) { if (isset($variation['variation_description'])) { echo $variation['variation_description']; } break; } } } } add_action('woocommerce_before_single_product', 'test', 10);
Дополнительно:
Ссылка на эту странницу сайта имеется?
Ответы:
У меня для Вас плохие новости, проблема в том, что карточка товара явно не была рассчитана на добавление дополнительных элементов в виде информации о вариации товаров (особенно радует абсолютное позиционирование у некоторых элементов там, где ожидаешь увидеть блочную верстку). У меня получилось их отобразить, но это выглядит крайне некрасиво:
- То есть вряд ли что-нибудь получится?
- Vorder96, получится непредсказуемое поведение, надо верстать карточку товара заново, сразу закладывая вывод информации о вариативном товаре. Если Вы сами не в состояние, то на фрилансе это будет недорого стоить.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для вариативного товара описание всех вариаций выводится потому, что Вы берёте данные всех available variations сразу. На карточке товара в каталоге нельзя просто вывести описание вариации без выбора конкретной вариации: у товара их может быть несколько, и WordPress не знает, какую именно показать.
Если нужно вывести описание выбранной вариации на странице товара, WooCommerce уже передаёт данные вариации в JS. Можно добавить описание в блок при событии
found_variation:jQuery(function ($) { $('form.variations_form').on('found_variation', function (event, variation) { $('.variation-description-target').html(variation.variation_description || ''); }); });jQuery(function ($) { $('form.variations_form').on('found_variation', function (event, variation) { $('.variation-description-target').html(variation.variation_description || ''); }); });
А в шаблоне поставить контейнер:
add_action('woocommerce_single_variation', function () { echo '<div class="variation-description-target"></div>'; }, 5);
Если речь именно о карточке товара в каталоге, там выбора вариации обычно нет. Можно вывести описание “первой доступной вариации”, но это может вводить в заблуждение:
if ($product->is_type('variable')) { $variations = $product->get_available_variations(); if (!empty($variations[0]['variation_description'])) { echo wp_kses_post($variations[0]['variation_description']); } }
Лучше для каталога вывести не описание вариации, а краткое описание товара или набор атрибутов. Описание конкретной вариации логично показывать после выбора размера/цвета/опции на странице товара.
Если хотите, чтобы в каталоге пользователь выбирал вариацию и сразу видел описание, это уже мини-форма вариаций в loop. Её можно сделать, но она утяжеляет каталог и часто ломает UX на мобильных.
Итог: на странице товара используйте JS-событие
found_variation. В карточке каталога выводите только описание конкретной выбранной/первой вариации, понимая ограничения, или используйте обычное краткое описание товара.