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

Решено Отображение свойств (атрибутов) товаров в карточке

Тема в разделе "Как изменить надпись, перевести текст и т. д.?", создана пользователем freearrows, 5 окт 2016.

  1. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Уважаемые форумчане! Прошу помочь разобраться с выводом свойств (атрибутов) товара в карточке товара. Облазил весь интернет, куча вопросов по этой теме, но рабочего решения никто не предлагает.
    Хотя человек, понимающий в PHP решит эту задачу легко.
    Проблема в том, что свойства товара выводятся сплошным списком сразу все:
    свойство 1 значение 1
    свойство 2 значение 2
    свойство 3 значение 3
    свойство 4 значение 4
    свойство 5 значение 5

    Однако, необходимо добавить к свойствам разделы, например:
    РАЗДЕЛ 1
    свойство 1 значение 1
    свойство 2 значение 2
    РАЗДЕЛ 2
    свойство 3 значение 3
    свойство 4 значение 4
    РАЗДЕЛ 3
    свойство 5 значение 5

    Для этого необходимо изменить код в файле \wp-content\plugins\woocommerce\templates\single-product\product-attributes.php
    чтобы можно было вытаскивать свойства по одному или массивом по slug. Существует возможность вытаскивать свойства запросом включающим pa_slug, но как это правильно прописать на PHP не знаю.
    Есть несколько решений в интернете, но они либо не корректно работают, либо не работают вовсе.

    Помогите пожалуйста!
     
  2. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    552
    Баллы:
    113
  3. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    К сожалению, указанный плагин не решит задачу.
    Необходимо выводить свойства в произвольном порядке, например:
    РАЗДЕЛ 1
    свойство 3 значение 3
    свойство 5 значение 5
    РАЗДЕЛ 2
    свойство 1 значение 1
    свойство 2 значение 2
    РАЗДЕЛ 3
    свойство 4 значение 4
    затем это все будет оформлено стилями.
    Оформление этой задачи плагином повышает нагрузку на сайт. Да к тому же, он платный.
    Требуется именно php решение.
     
  4. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    552
    Баллы:
    113
    А Вы думаете, что кто-то напишет для Вас бесплатно такое решение?
    Хотя может и найдутся альтруисты.
     
  5. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Понимаю, что в нашей жизни все за деньги, даже одно слово. Однако, есть надежда, что есть люди на этом форуме, могущие помочь.
    Тему создал именно потому, что каждый сталкивается с этой проблемой.
    Нужно всего лишь вставить нужную переменную в код:
    Код:
    <?php foreach ( $attributes as $attribute ) :
        if ( empty( $attribute['is_visible'] ) || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
          continue;
        } else {
          $has_row = true;
        }
        ?>
        <tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
          <th><?php echo wc_attribute_label( $attribute['name'] ); ?></th>
          <td><?php
            if ( $attribute['is_taxonomy'] ) {
    
              $values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
              echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
            } else {
    
              // Convert pipes to commas and display values
              $values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
              echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
    
            }
          ?></td>
        </tr>
      <?php endforeach; ?>
    но, к сожалению я не программист.
     
  6. tuxfighter

    tuxfighter Местный

    Сообщения:
    666
    Симпатии:
    105
    Баллы:
    43
    ни разу не сталкивался с подобной проблемой.
     
  7. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    552
    Баллы:
    113
    "Раздел" для атрибутов в Вашем понимании что из себя представляет?
    Сущность "раздел" существует или его нужно добавлять?
     
  8. DiZeR

    DiZeR

    Сообщения:
    113
    Симпатии:
    16
    Баллы:
    18
    Можно через костыль сделать не правя php

    1) Разрешаем Использование HTML В Атрибутах Товаров в functionsphp.php
    PHP:
    /*** Разрешаем Использование HTML В Атрибутах Товаров **/
    foreach ( array( 'pre_term_description' ) as $filter ) {
        
    remove_filter$filter'wp_filter_kses' );
    }

    foreach ( array( 
    'term_description' ) as $filter ) {
        
    remove_filter$filter'wp_kses_data' );
    }
    2) создаем вывод атрибутов в таком порядке:
    • (atr0): <h2>значение или заголовок</h2>
    атрибут (atr1): значение
    атрибут (atr2): значение
    • (atr3): <h2>значение или заголовок</h2>
    атрибут (atr4): значение
    атрибут (atr5): значение
    • (atr6): <h2>значение или заголовок</h2>
    атрибут (atr7): значение
    атрибут (atr8): значение

    Т.е вместо названия (там где должны быть разделы) ставим маркер • (любой желаемый символ из юникода) или шрифта fontawesome
    А в заголовки добавляем html <H>

    P.S: Сам не пробовал - теория )
     
  9. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Раздел можно прописать в том же product-attributes.php просто как html.
    А вот после Раздела должен идти короткий код вызова свойства товара по слугу. Понимаю, что это маленький кусочек кода, но правильно написать его не могу из-за отсутствия познаний в php.
    Имея код вызова Свойства, можно произвольно располагать его используя html форматирование.
     
  10. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    При такой схеме потребуется добавление новых свойств в товары. Товаров очень много, правка практически не реальна.
     
  11. DiZeR

    DiZeR

    Сообщения:
    113
    Симпатии:
    16
    Баллы:
    18
    Это да...
    - если важна только визуальная составляющая можно добавить <h2 class="myh2">Заголовок</h2> к уже существующим атрибутам и по средствам CSS (.myh2) вывести приемлемый вид.

    P.S: Хотя возможно это еще более геморройный костыль ))

    - тоже спрашивал про массовое добавление атрибутов, но так и не подсказали.
    возможно теперь WooCommerce Advanced Bulk Edit на это способен, нужно проверять.
     
  12. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Именно так и хочу сделать.
    Осталось только правильно вывести свойства. Подозреваю, что нужно всего лишь заменить код
    <?php echo wc_attribute_label( $attribute['name'] ); ?> на что-то типа
    <?php echo wc_attribute_label( $attribute['pa_size', 'pa_color'] ); ?> и тоже самое сделать для значений свойств. Только как правильно это написать?
     
  13. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Свойства добавлял WP All Import + Woocommerce бесплатной версией.
     
  14. DiZeR

    DiZeR

    Сообщения:
    113
    Симпатии:
    16
    Баллы:
    18
    Имел ввиду без правки PHP кода woo - продолжая затею с первым примером. (Использование HTML В Атрибутах Товаров)

    Так если он может добавлять массово свойства (атрибуты) в чем проблема?)
     
  15. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Проблема в том, что придется добавлять лишние свойства товаров и превращать их в html теги. Помимо созданного такой структурой мусора в товарах, свойства по прежнему нельзя будет менять местами, так как по сути весь массив свойств выводится одном кодом.
    Я же хочу вывести только конкретные свойства по слугу, т.е. pa_size, pa_color, pa_ves и т.п.
    Например, нашел в интеренете код:
    Код:
    <?php $subheadingvalues = get_the_terms( $product->id, 'pa_proizvoditel');
                        foreach ( $subheadingvalues as $subheadingvalue ) {
                        echo $subheadingvalue->name; } ?>
    Выводит значение свойства Производитель. Как в эту формулу добавить заголовок свойства и проверку не пустое ли оно?
     
  16. DiZeR

    DiZeR

    Сообщения:
    113
    Симпатии:
    16
    Баллы:
    18
    Пока не силен в php :barefoot: делаю тоже, что и вы - ищу, спрашиваю, пробую варианты - опишите чем закончиться ваше решение, успехов. (y)
     
  17. freearrows

    freearrows

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    И так, поиски решения все же увенчались успехом!
    На просторах рунета нашел человека который помог слепить код и описал решение в своем блоге здесь http://woocommerce-russian.ru/vyvod-atributa-tovara-v-kataloge/
    Как я и говорил, php код для произвольного вывода атрибутов товара наипростейший:
    PHP:
    <?php
    $subheadingvalues 
    get_the_terms$product->id'pa_proizvoditel');
    if (
    $subheadingvalues): ?>
    <span>Производитель:</span>
    <?php foreach ( $subheadingvalues as $subheadingvalue ):
    echo 
    $subheadingvalue->name;
    endforeach;
    endif; 
    ?>
    Этот код выводит значение атрибута Производитель по slug с наименованием pa_proizvoditel.
    Это все можно еще и стилями разукрасить на свой вкус.
    Например, у меня вместо стандартного вывода атрибутов получилось сделать следующее:
    верстка.jpg
    Однако, код не претендует на идеальность, его можно еще допилить.
    Можно сделать вывод атрибутов вместе с наименованиями и не по одному, а массивом. Тогда будет практически идеальный код для кастомизации вывода атрибутов. Надеюсь php программеры прочитают эту статью и помогут решить задачу.
     
    • Нравится Нравится x 2
    • Согласен Согласен x 1
  18. redjek

    redjek Местный

    Сообщения:
    155
    Симпатии:
    36
    Баллы:
    28
    Так то оно гораздо лучше выглядит =)