2016-07-02 17 views
4

私のワードプレスのサイトで次のコードを使用してWooCommerceでの抜粋を短縮しています.14文字以下の文字を入力しても問題ありません。私が14文字以上を入力するとすぐに、完全な短い説明が表示されます。制限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製品descを制限することができます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は、あなたがそれらの単語の特定の範囲を取得することができますし、その後が戻って一緒に範囲を組み合わせ、単語の配列に休憩元の文字列を爆発単一の文字列。

このコードをに変更すると、ショップページの制限が変更されます。製品詳細ページ

両方のページを変更する場合は、if (!is_product())の条件を削除してください。

関連する問題