Лучшие решения
появляются в процессе

Добавление краткого описания в каталоге товаров Woocommerce

 

Способ 1.

 

Создаем функцию , привязанную к событию woocommerce_after_shop_loop_item_title:

 

add_action( 'woocommerce_after_shop_loop_item_title', 'add_short_description', 9 );
function add_short_description() {
	  echo  the_excerpt().'<br />';
}

 

Если нужно, чтобы краткое описание обрезалось, то код будет выглядеть так:

 


add_action( 'woocommerce_after_shop_loop_item_title', 'add_short_description', 9 );
function add_short_description() {
    global $post;
    $text = $post->post_excerpt;
    $maxchar = 100; //максимальное кол-во символов
    
    $text = preg_replace ('~\[[^\]]+\]~', '', $text ); //убираем шорткоды
    
    //удаляем все html символы
    $text = strip_tags( $text);
    
    // Обрезаем
    if ( mb_strlen( $text ) > $maxchar ){
                $text = mb_substr( $text, 0, $maxchar );
                $text = preg_replace('@(.*)\s[^\s]*$@s', '\\1 ...', $text );
            }
    echo $text;
}

 

Способ 2.

Для выполнения этой задачи необходимо скопировать из папки плагина woocommerce/templates файл content-product.php, который отвечает за вывод товаров в цикле Woocommerce, и  поместить его в папку woocommerce ( если нет - создать) своей темы.  Это нужно для того, чтобы при обновлении плагина сохранить ваши изменения. Поэтому ни в коем случае не стоит редактировать файлы плагина.

Затем вставляем в файл следующий код:

 <div itemprop="description">
<?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
   </div>

Должно получиться так:

do_action( 'woocommerce_shop_loop_item_title' );
/**
 * woocommerce_after_shop_loop_item_title hook.
 *
 * @hooked woocommerce_template_loop_rating - 5
 * @hooked woocommerce_template_loop_price - 10
 */?>
   <div itemprop="description">
<?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
   </div> <?
do_action( 'woocommerce_after_shop_loop_item_title' );

После этого краткое описание будет отображаться на карточке товара в каталоге.


Вам помогла эта статья? Оцените!
(10 оценок, среднее: 4,20 из 5)
Загрузка...


Комментариев: 10

  • Подскажите, а как ограничить кол-во символов в описании? описания довольно длинные, и получаутся некрасиво

    спасибо!

    • Вместо echo the_excerpt();
      прописать следующий код:

      
      $text = $post->post_excerpt;
      	$maxchar = 100; //максимальное кол-во символов
      
      	$text = preg_replace ('~\[[^\]]+\]~', '', $text ); //убираем шорткоды
      
      	//удаляем все html символы
      	$text = strip_tags( $text);
      
      	// Обрезаем
      	if ( mb_strlen( $text ) > $maxchar ){
      		$text = mb_substr( $text, 0, $maxchar );
      		$text = preg_replace('@(.*)\s[^\s]*$@s', '\\1 ...', $text );
      	}
      
      	echo $text;
      
      
  • Работают не все варианты. Работают короткий Способ 1 и Способ 2. Для Способа 1 с обрезкой необходимо перед $text = $post->post_excerpt; добавить строчку global $post;. Иначе не работает код.

    Еще не понятно как в Способе 2 вставить ограниечение по символам.

    Кстати в Способе 1 ограничение по символам работает не так как должно - ограничивается словами, а не символами.

    • Про global $post; согласен.
      В способе два можно просто вставить код ограничения по символам из способа 1.
      Ограничивать по словам логичнее,- некрасиво, когда слова обрезаны.

  • Да, забыл. echo $text лучше, конечно, оформить с HTML разметкой и присвоением класса выводимому тексту. Примерно так:

    echo "<span class='excerpt'>$text</span>";

    Тогда в CSS стилях тексту можно придать личное форматирование. В противном случае текст наследует родительский стиль и с ним труднее "бороться". И спасибо за код. С мелкими доработками прекрасно работает.

  • Добрый день!
     
    спасибо Вам огромное за решение - у меня завелось и получилось то, что искал)) 
    Возможно, подскажите, решение для аналогичной задачи, но уже с выводом краткого описания вариативного товара на страницу каталога товаров.
    Использую плагин woo-show-single-variations для того чтоб вывести все вариации в каталог - картинка, название, цена - отображаются, а вот краткое описание каждой отдельной вариации - нет, хотя в админ панеле - предусмотрено для каждой вариации отдельное поле (но оно отображаются только в карточке товара). 
    Буду признателен за помощь)
     
     

  • У меня почему-то Способ 1 часть 2 - не работает. Первая часть срабатывает. Вставляла вот такой код в файл function.php
    add_action( 'woocommerce_after_shop_loop_item_title', 'add_short_description', 9 );function add_short_description() {global $post;$text = $post->post_excerpt;$maxchar = 100; //максимальное кол-во символов// Обрезаемif ( mb_strlen( $text ) > $maxchar ){$text = mb_substr( $text, 0, $maxchar );$text = preg_replace('@(.*)\s[^\s]*$@s', '\\1 ...', $text );}echo "<span class='excerpt'>$text</span>";}
    Пробовала вообще другой вариант вставки:
    add_action( 'woocommerce_after_shop_loop_item_title', 'add_short_description', 9 );function add_short_description() {global $post;$text = $post -> post_excerpt;$max_char = 100; //максимальное кол-во символов
    // Обрезаемif ( strlen( $text ) > $max_char ){$text = substr_replace( $text, '...', $max_char );}echo "<span class='excerpt'>$text</span>";}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *