Не корректно отображается поле в карточке товара, как исправить?

Ссылка скопирована
1 ответ

Здравствуйте, помогите пожалуйста, нужно вывести описание вариации на карточку товара, у меня есть код который выводит описание, но оно не отображается.

Вот этот код отображает описание, но всех вариаций:

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

Не корректно отображается поле в карточке товара, как исправить?

Дополнительно:

Ссылка на эту странницу сайта имеется?

  • Михаил Р., https://lisko.green/
  • Ответы:

    У меня для Вас плохие новости, проблема в том, что карточка товара явно не была рассчитана на добавление дополнительных элементов в виде информации о вариации товаров (особенно радует абсолютное позиционирование у некоторых элементов там, где ожидаешь увидеть блочную верстку). У меня получилось их отобразить, но это выглядит крайне некрасиво:

    Не корректно отображается поле в карточке товара, как исправить?

    • То есть вряд ли что-нибудь получится?
    • Vorder96, получится непредсказуемое поведение, надо верстать карточку товара заново, сразу закладывая вывод информации о вариативном товаре. Если Вы сами не в состояние, то на фрилансе это будет недорого стоить.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    Для вариативного товара описание всех вариаций выводится потому, что Вы берёте данные всех 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);

    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']);
        }
    }

    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. В карточке каталога выводите только описание конкретной выбранной/первой вариации, понимая ограничения, или используйте обычное краткое описание товара.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно