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

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

Image CMS
#1
Уважаемые форумчане! Прошу помочь разобраться с выводом свойств (атрибутов) товара в карточке товара. Облазил весь интернет, куча вопросов по этой теме, но рабочего решения никто не предлагает.
Хотя человек, понимающий в 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 не знаю.
Есть несколько решений в интернете, но они либо не корректно работают, либо не работают вовсе.

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

searchingman

Гуру
Местный
#4
А Вы думаете, что кто-то напишет для Вас бесплатно такое решение?
Хотя может и найдутся альтруисты.
 
#5
Понимаю, что в нашей жизни все за деньги, даже одно слово. Однако, есть надежда, что есть люди на этом форуме, могущие помочь.
Тему создал именно потому, что каждый сталкивается с этой проблемой.
Нужно всего лишь вставить нужную переменную в код:
Код:
<?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; ?>
но, к сожалению я не программист.
 

searchingman

Гуру
Местный
#7
"Раздел" для атрибутов в Вашем понимании что из себя представляет?
Сущность "раздел" существует или его нужно добавлять?
 

DiZeR

Опытный
#8
Можно через костыль сделать не правя 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
"Раздел" для атрибутов в Вашем понимании что из себя представляет?
Сущность "раздел" существует или его нужно добавлять?
Раздел можно прописать в том же product-attributes.php просто как html.
А вот после Раздела должен идти короткий код вызова свойства товара по слугу. Понимаю, что это маленький кусочек кода, но правильно написать его не могу из-за отсутствия познаний в php.
Имея код вызова Свойства, можно произвольно располагать его используя html форматирование.
 

DiZeR

Опытный
#11
При такой схеме потребуется добавление новых свойств в товары. Товаров очень много, правка практически не реальна.
Это да...
- если важна только визуальная составляющая можно добавить <h2 class="myh2">Заголовок</h2> к уже существующим атрибутам и по средствам CSS (.myh2) вывести приемлемый вид.

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

- тоже спрашивал про массовое добавление атрибутов, но так и не подсказали.
возможно теперь WooCommerce Advanced Bulk Edit на это способен, нужно проверять.
 
#12
Это да...
- если важна только визуальная составляющая можно добавить <h2 class="myh2">Заголовок</h2> к уже существующим атрибутам и по средствам CSS (.myh2) вывести приемлемый вид.
Именно так и хочу сделать.
Осталось только правильно вывести свойства. Подозреваю, что нужно всего лишь заменить код
<?php echo wc_attribute_label( $attribute['name'] ); ?> на что-то типа
<?php echo wc_attribute_label( $attribute['pa_size', 'pa_color'] ); ?> и тоже самое сделать для значений свойств. Только как правильно это написать?
 

DiZeR

Опытный
#14
Именно так и хочу сделать.
Осталось только правильно вывести свойства. Подозреваю, что нужно всего лишь заменить код
<?php echo wc_attribute_label( $attribute['name'] ); ?> на что-то типа
<?php echo wc_attribute_label( $attribute['pa_size', 'pa_color'] ); ?> и тоже самое сделать для значений свойств. Только как правильно это написать?
Имел ввиду без правки PHP кода woo - продолжая затею с первым примером. (Использование HTML В Атрибутах Товаров)

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

DiZeR

Опытный
#16
Например, нашел в интеренете код:
Код:
<?php $subheadingvalues = get_the_terms( $product->id, 'pa_proizvoditel');
                    foreach ( $subheadingvalues as $subheadingvalue ) {
                    echo $subheadingvalue->name; } ?>
Выводит значение свойства Производитель. Как в эту формулу добавить заголовок свойства и проверку не пустое ли оно?
Пока не силен в php :barefoot: делаю тоже, что и вы - ищу, спрашиваю, пробую варианты - опишите чем закончиться ваше решение, успехов. (y)
 
#17
И так, поиски решения все же увенчались успехом!
На просторах рунета нашел человека который помог слепить код и описал решение в своем блоге здесь 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 программеры прочитают эту статью и помогут решить задачу.