• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Отображение в корзине значений свойств вариативных товаров, а не их ярлыков [РЕШЕНО]

Image CMS

ca5h

Новичок
#1
Есть некоторые свойства


У данных свойств есть значения


При выборе вариативного товара отображается значение свойства, т.е. столбец "Название"


А вот в корзине отображается ярлык (в данном случае Цвет)


За вывод свойств в карточке товара отвечает файл woocommerce/single-product/add-to-cart/variable.php, а конкретно данный кусок кода
PHP:
<?php
                                if ( is_array( $options ) ) {

                                    if ( isset( $_REQUEST[ 'attribute_' . sanitize_title( $name ) ] ) ) {
                                        $selected_value = $_REQUEST[ 'attribute_' . sanitize_title( $name ) ];
                                    } elseif ( isset( $selected_attributes[ sanitize_title( $name ) ] ) ) {
                                        $selected_value = $selected_attributes[ sanitize_title( $name ) ];
                                    } else {
                                        $selected_value = '';
                                    }

                                    // Get terms if this is a taxonomy - ordered
                                    if ( taxonomy_exists( $name ) ) {

                                        $orderby = wc_attribute_orderby( $name );

                                        switch ( $orderby ) {
                                            case 'name' :
                                                $args = array( 'orderby' => 'name', 'hide_empty' => false, 'menu_order' => false );
                                            break;
                                            case 'id' :
                                                $args = array( 'orderby' => 'id', 'order' => 'ASC', 'menu_order' => false, 'hide_empty' => false );
                                            break;
                                            case 'menu_order' :
                                                $args = array( 'menu_order' => 'ASC', 'hide_empty' => false );
                                            break;
                                        }

                                        $terms = get_terms( $name, $args );

                                        foreach ( $terms as $term ) {
                                            if ( ! in_array( $term->slug, $options ) )
                                                continue;

                                            echo '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $term->slug ), false ) . '>' . apply_filters( 'woocommerce_variation_option_name', $term->name ) . '</option>';
                                        }
                                    } else {

                                        foreach ( $options as $option ) {
                                            echo '<option value="' . esc_attr( sanitize_title( $option ) ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $option ), false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) ) . '</option>';
                                        }

                                    }
                                }
                            ?>
За вывод свойств в корзине отвечает файл woocommerce/cart/cart.php, и конкретно данный кусок кода
PHP:
 echo $woocommerce->cart->get_item_data( $values );
Как сделать чтобы в корзине отображались значения свойств, т.е. %%Название свойства%%: %%Значение свойства%%?

Спасибо.
 

Stork.71

Гуру
Местный
#5
Решения не дам, но помогу чуток. Сам не программер, а экспериментировать времени сильно нет.
Функция get_item_data описана в \www\wp-content\plugins\woocommerce\includes\class-wc-cart.php, тут ее править и надо.
Наш кусок - это // Variation data
В конце там есть код
$item_data[] = array(
'key' => $label,
'value' => $value
в следующем куске // Other data - returned as array with name/value values в конце код
$item_data[] = array(
'key' => $data['name'],
'value' => $display_value
Я так понял, что $value - это ярлык на англицком, а $display_value - это отображаемое по этому ярлыку значение на русском. Но это все догадки!!!!
В любом случае, попробуйте поэкспериментировать-поизменять, что выйдет. Скорее всего, надо также править кусок кода, который идет перед выводом:
PHP:
                    if ( '' === $value )
                        continue;

                    $taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );

                    // If this is a term slug, get the term's nice name
                    if ( taxonomy_exists( $taxonomy ) ) {
                        $term = get_term_by( 'slug', $value, $taxonomy );
                        if ( ! is_wp_error( $term ) && $term && $term->name ) {
                            $value = $term->name;
                        }
                        $label = wc_attribute_label( $taxonomy );

                    // If this is a custom option slug, get the options name
                    } else {
                        $value              = apply_filters( 'woocommerce_variation_option_name', $value );
                        $product_attributes = $cart_item['data']->get_attributes();
                        if ( isset( $product_attributes[ str_replace( 'attribute_', '', $name ) ] ) ) {
                            $label = wc_attribute_label( $product_attributes[ str_replace( 'attribute_', '', $name ) ]['name'] );
                        } else {
                            $label = $name;
                        }
                    }
 

Stork.71

Гуру
Местный
#6
Да, и еще: какая у Вас версия WC? Просто у меня таких папок, как вы указали, нету! Пути немного другие.
 

ca5h

Новичок
#7
Решение от Андрея Щербакова, за что ему огромное спасибо!
В файле plugins\woocommerce\includes\class-wc-form-handler.php
после строки 591 "if ( $attribute['is_taxonomy'] ) {"
перед "$variations[ $taxonomy ] = $value;"
добавить следующий код:
PHP:
  $post_terms = wp_get_post_terms( $adding_to_cart->id, $attribute['name'] );
                        foreach ( $post_terms as $term ){
                if(sanitize_title($term->slug) === sanitize_title($value)){
                  $value = trim($term->name);
                  break;
                   }
                      }
 

Solomon Fox

Форумчанин
#8
У меня похожая проблема, только нужно добавить название атрибута, на страницу отображения товара, а конкретно на страницу с вариациями товара. , т.к. плагин выводит название ярлыков к товарам только на английском, а вместо текста (если он русский) только кракозябры.
 

Zalkid

Новичок
#9
Ребята, подскажите, как сделать так, чтобы в корзине не выводились параметры вариативного товара, а выводились только на странице самого товара. Сейчас эти параметры выводятся и на странице, и в корзине, а так как вариаций у товаров много, выглядит в корзине это ужасно
https://pp.userapi.com/c636722/v636722789/673b3/-ItbJ4pkcwk.jpg
 
Сверху Снизу