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

Отображение описания свойств атрибутов

Image CMS

Dokole

Новичок
#1
В стандартных темах не отображаются описание атрибутов
Перекопал десяток тем как минимум
Если есть у кого то на примете, подскажите, пожалуйста

Описаниеwp показывает следующее
"Описание по умолчанию не отображается, однако некоторые темы могут его показывать."
 

Tanhuxa

Форумчанин
#2
У меня тот же вопрос. Кто может помочь отобразить описание атрибутов? :unsure:
 

Tanhuxa

Форумчанин
#3
Похоже, нашла ответ.
Только, признаюсь, не знаю, куда его нужно вписать. Кто может помочь разобраться с кодом?
 

Tanhuxa

Форумчанин
#4
Ну подскажите, хоть как называется это описание в коде и где его искать!!! :cry: :cry: :cry:
 

searchingman

Гуру
Местный
#7
Если речь про вывод описания атрибутов в карточке товара, то решение примерно такое.
Для вывода атрибутов используется шаблон \wp-content\plugins\woocommerce\templates\single-product\product-attributes.php. Копируем его в свою тему и делаем небольшие правки.
Следующий код
PHP:
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
                    echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
заменяем на
PHP:
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'all' ) );
                    foreach ($values as $key => $value) {
                        echo  $value->name;
                        if (!empty($value->description))
                        echo  '<br>'.$value->description.'<br>';
                    }
На примере темы StoreFront :
- было http://take.ms/S9gLu
- стало http://take.ms/6Sp34
 

Tanhuxa

Форумчанин
#8
Если речь про вывод описания атрибутов в карточке товара, то решение примерно такое.
Для вывода атрибутов используется шаблон \wp-content\plugins\woocommerce\templates\single-product\product-attributes.php. Копируем его в свою тему и делаем небольшие правки.
Следующий код
PHP:
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'names' ) );
                    echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
заменяем на
PHP:
$values = wc_get_product_terms( $product->id, $attribute['name'], array( 'fields' => 'all' ) );
                    foreach ($values as $key => $value) {
                        echo  $value->name;
                        if (!empty($value->description))
                        echo  '<br>'.$value->description.'<br>';
                    }
На примере темы StoreFront :
- было http://take.ms/S9gLu
- стало http://take.ms/6Sp34
Что-то ничего не получается :(
Вот код, который получился:
<?php
/**
* Product attributes
*
* Used by list_attributes() in the products class
*
* @author WooThemes
* @package WooCommerce/Templates
* @version 2.1.3
*/

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}

$has_row = false;
$alt = 1;
$attributes = $product->get_attributes();

ob_start();

?>
<table class="shop_attributes">

<?php if ( $product->enable_dimensions_display() ) : ?>

<?php if ( $product->has_weight() ) : $has_row = true; ?>
<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
<th><?php _e( 'Weight', 'woocommerce' ) ?></th>
<td class="product_weight"><?php echo $product->get_weight() . ' ' . esc_attr( get_option( 'woocommerce_weight_unit' ) ); ?></td>
</tr>
<?php endif; ?>

<?php if ( $product->has_dimensions() ) : $has_row = true; ?>
<tr class="<?php if ( ( $alt = $alt * -1 ) == 1 ) echo 'alt'; ?>">
<th><?php _e( 'Dimensions', 'woocommerce' ) ?></th>
<td class="product_dimensions"><?php echo $product->get_dimensions(); ?></td>
</tr>
<?php endif; ?>

<?php endif; ?>

<?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' => 'all' ) );
foreach ($values as $key => $value) {
echo $value->name;
if (!empty($value->description))
echo '<br>'.$value->description.'<br>';
}

} 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; ?>

</table>
<?php
if ( $has_row ) {
echo ob_get_clean();
} else {
ob_end_clean();
}
Что-то еще надо изменить?
 

mulch

Форумчанин
#9
Коллеги, спустя год возник похожий вопрос. А как вывести (внимание) Описание ПОДабрибута на странице, отображающей все товары, относящиеся к данному ПОДатрибуту?
Например: на странице "Жемжуг культивированный" сначало должно быть описание этого жемчуга, а потом все, что с ним сделано. Пока описание никак вотнкуть не получается. Даже не понимаю откуда копать?
Само описание у ПОДатрибута "Жемчуг культивированный" атрибута "Материал" вбито.
Заранее благодарен за подсказку.
 

mulch

Форумчанин
#10
Пол дня "в библиотеке", и вопрос почти решен. :)
Для решения этой моей задачи надо было:
1. сдублировать файл archive-product.php из WooCommerce по правилам в свою дочернюю тему.
2. далее в нем перед строкой "do_action( 'woocommerce_before_shop_loop' );" вставить строку "$str=term_description(); if(!empty($str)){echo apply_filters("the_content", $str);} (инфо отсюда, респект и уважуха коллеге).

Вот еще 1 час пытался с этому стрингу привязать '<p class="myblog">', но ни фига не получается.
команда типа "?><script> $("p").addClass("myblog"); </script> <?php" результата также не дает вообще никакого.
Как слепить стринг php и html?
 

mulch

Форумчанин
#11
Кому интересно - усовершенствовал вывод описаний любой таксономии (категории, метки и любые свои вида "pa_***".
Для этого можно файл archive-product.php из WooCommerce не трогать.
Достаточно в functions.php дочерней темы добавить следующее
1. функцию
function my_all_description() {
if ( is_tax( array( 'product_cat', 'product_tag', 'pa_material' ) ) && 0 === absint( get_query_var( 'paged' ) ) ) {
$description = wc_format_content( term_description() );
if ( $description ) {
echo "<p class=\"myblog\"$description";
} } }

Далее в style.css дочерней темы раскрашиваем класс myblog или любой здесь вами используемый

2. перехучить ряд функций так
add_action( 'init', 'custom_remove', 10 ); //важно - перехучить в конце построения списка функций - на функции init
function custom_remove () {
remove_action( 'woocommerce_archive_description', 'woocommerce_taxonomy_archive_description', 10); //убираем стандартный вывод описаний категорий и меток
//add_action( 'woocommerce_after_shop_loop', 'my_all_description', 100); //описания категорий и т.п. ПОД товарами - для роботов только - если надо
add_action( 'woocommerce_archive_description', 'my_all_description', 10); //свои описания таксономий ПЕРЕД товарами
}

И начинающим веб-мастерам - рекомендация - Внимательней с синтаксисом. ОЧЕНЬ много проблем и неработающих функций из-за лишних пробелов, отсутствия точек конкатенации, " или ', неправильно расставленных скобок и т.п.
 
Последнее редактирование:

Яков

Новичок
#12
В стандартных темах не отображаются описание атрибутов
Перекопал десяток тем как минимум
Если есть у кого то на примете, подскажите, пожалуйста

Описаниеwp показывает следующее
"Описание по умолчанию не отображается, однако некоторые темы могут его показывать."
Как решили задачу???
 
Сверху Снизу