Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем ca5h, 16 май 2014.

  1. ca5h

    ca5h

    Сообщения:
    4
    Симпатии:
    2
    Баллы:
    3
    Есть некоторые свойства
    [​IMG]

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

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

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

    За вывод свойств в карточке товара отвечает файл 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_attributessanitize_title$name ) ] ) ) {
                                            
    $selected_value $selected_attributessanitize_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 ) . '" ' selectedsanitize_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_attrsanitize_title$option ) ) . '" ' selectedsanitize_title$selected_value ), sanitize_title$option ), false ) . '>' esc_htmlapply_filters'woocommerce_variation_option_name'$option ) ) . '</option>';
                                            }

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

    Спасибо.
     
  2. ca5h

    ca5h

    Сообщения:
    4
    Симпатии:
    2
    Баллы:
    3
    Надеюсь на такой-же подробный ответ, как и мой вопрос ;)
     
  3. Probiker

    Probiker

    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    та же проблема (( вы ее решили ?
     
  4. ca5h

    ca5h

    Сообщения:
    4
    Симпатии:
    2
    Баллы:
    3
    Нет, пока в поисках
     
  5. Stork.71

    Stork.71 Местный

    Сообщения:
    1.032
    Симпатии:
    254
    Баллы:
    83
    Решения не дам, но помогу чуток. Сам не программер, а экспериментировать времени сильно нет.
    Функция 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_namestr_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_attributesstr_replace'attribute_'''$name ) ] ) ) {
                                
    $label wc_attribute_label$product_attributesstr_replace'attribute_'''$name ) ]['name'] );
                            } else {
                                
    $label $name;
                            }
                        }
     
    • Нравится Нравится x 1
  6. Stork.71

    Stork.71 Местный

    Сообщения:
    1.032
    Симпатии:
    254
    Баллы:
    83
    Да, и еще: какая у Вас версия WC? Просто у меня таких папок, как вы указали, нету! Пути немного другие.
     
  7. ca5h

    ca5h

    Сообщения:
    4
    Симпатии:
    2
    Баллы:
    3
    Решение от Андрея Щербакова, за что ему огромное спасибо!
    В файле 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;
                       }
                          }
     
    • Нравится Нравится x 2
  8. Solomon Fox

    Solomon Fox

    Сообщения:
    90
    Симпатии:
    4
    Баллы:
    8
    У меня похожая проблема, только нужно добавить название атрибута, на страницу отображения товара, а конкретно на страницу с вариациями товара. , т.к. плагин выводит название ярлыков к товарам только на английском, а вместо текста (если он русский) только кракозябры.