2016-07-02 3 views
4

Я использую следующий код на моем сайте WordPress, чтобы сократить свое описание excerpt на WooCommerce, и он отлично работает, если я ввожу свои символы для 14 или менее. Как только я вводим более 14 символов, он показывает полное краткое описание.Limit WooCommerce описание продукта длина

add_action('woocommerce_after_shop_loop_item_title', 'lk_woocommerce_product_excerpt', 35, 2); 
if (!function_exists('lk_woocommerce_product_excerpt')) 
{ 
    function lk_woocommerce_product_excerpt() 
    { 
     $content_length = 14; 
     global $post; 
     $content = $post->post_excerpt; 
     $wordarray = explode(' ', $content, $content_length + 1); 
     if(count($wordarray) > $content_length) : 
      array_pop($wordarray); 
      array_push($wordarray, '...'); 
      $content = implode(' ', $wordarray); 
      $content = force_balance_tags($content); 
      $content = substr($content, 0, 14); 

     endif; 
     echo "<span class='excerpt'><p>$content...</p></span>"; 
    } 
} 

Любая помощь будет принята с благодарностью.

спасибо.

ответ

2

- - (обновлено) - -

Ваш код подсчета букв с пробелами, а не ниже код подсчета слов без пробелов. Пожалуйста, See this live php file in action(здесь результат вашего кода на строку, содержащую 25 слов и мою тоже). Затем этот код работает правильно, как вы хотите:

add_action('woocommerce_after_shop_loop_item_title', 'lk_woocommerce_product_excerpt', 35, 2); 
if (!function_exists('lk_woocommerce_product_excerpt')) 
{ 
    function lk_woocommerce_product_excerpt() 
    { 
     global $post; 
     $limit = 14; 
     $text = $post->post_excerpt; 
     if (str_word_count($text, 0) > $limit) { 
      $arr = str_word_count($text, 2); 
      $pos = array_keys($arr); 
      $text = substr($text, 0, $pos[$limit]) . '...'; 
      // $text = force_balance_tags($text); // may be you dont need this… 
     } 
     echo '<span class="excerpt"><p>' . $text . '</p></span>'; 
    } 
} 

Или вы можете использовать функцию из потока ниже, с вашим следующим образом:

if (!function_exists('lk_limit_text')) 
{ 
    function lk_limit_text($text, $limit) { 
     if (str_word_count($text, 0) > $limit) { 
      $words = str_word_count($text, 2); 
      $pos = array_keys($words); 
      $text = substr($text, 0, $pos[$limit]) . '...'; 
     } 
     return $text; 
    } 
} 

add_action('woocommerce_after_shop_loop_item_title', 'lk_woocommerce_product_excerpt', 35, 2); 
if (!function_exists('lk_woocommerce_product_excerpt')) 
{ 
    function lk_woocommerce_product_excerpt() 
    { 
     global $post; 
     $content = $post->post_excerpt; 
     // $content = force_balance_tags($content); // may be you dont need this… 
     echo '<span class="excerpt"><p>' . lk_limit_text($content, 14) . '</p></span>'; 
    } 
} 

Это должно работать ...

Этот код основан на этой теме: How can I truncate a string to the first 20 words in PHP?

+0

Спасибо за код LoicTheAztec! К сожалению, это не работает, чтобы сократить длину описания. Есть ли у вас какие-либо другие идеи, почему исходный код не будет работать за 14 символов? Я пробовал с разными темами WordPress, но это не имело значения. – user3612498

+0

По какой-то причине я думал, что ваш исходный код подсчитывает символы, а не слова. Так оно и работает! Спасибо огромное! – user3612498

+0

Просто быстрый вопрос. Есть ли простой способ изменить код, поэтому он использует полное описание WooCommerce вместо короткого? – user3612498

0

Вы можете ограничить WooCommerce продукт по убыванию ription

использовать этот код -

add_filter('woocommerce_short_description', 'limit_product_short_description', 10, 1); 

function limit_product_short_description($post_excerpt) 
{ 
    if (!is_product()) 
    { 
     $pieces = explode(" ", $post_excerpt); 
     $post_excerpt = implode(" ", array_splice($pieces, 0, 14)); 
    } 
    return $post_excerpt; 
} 

взрываются разбивает исходную строку в массив слов, array_splice позволяет получить определенные диапазоны этих слов, а затем Implode объединяет диапазоны вместе в одиночные строки.

Используйте этот код для change Предел на странице магазина, а не подробная информация о продукте Страница.

Если вы хотите изменить на обеих страницах, удалите if (!is_product()) состояние.

Смежные вопросы