限制 Woocommerce 中的产品简短描述长度

我在我的 WordPress 网站上使用以下代码来缩短我在 WooCommerce 上的描述摘录,如果我输入 14 个或更少的字符,它可以正常工作.只要我输入超过 14 个字符,它就会显示完整的简短描述.

I'm using the following code on my WordPress site to shorten my description excerpt on WooCommerce and it works fine if I input my characters for 14 or less. As soon as I enter more than 14 characters it shows the full short description.

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

任何帮助将不胜感激.

谢谢.

推荐答案

您的代码正在计算带有空格的字母,而下面的代码正在计算没有空格的单词.请查看此实时 php 文件 (这里是你的代码在包含 25 个单词的字符串上的结果,我的也是).然后此代码按您的意愿正常工作:

Your code is counting letters with white spaces, instead the code below is counting words without white spaces. Please See this live php file in action (here the result of your code on a string containing 25 words and mine too). Then this code is working correctly as you wish:

add_action( 'woocommerce_after_shop_loop_item_title', 'shorten_product_excerpt', 35 );
function shorten_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>';
}

<小时>

或者您可以使用下面线程中的函数,以这种方式使用:


Or you can use the function from the thread below, with yours this way:

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

这应该有效......

This should work…

此代码基于此线程:如何将字符串截断为 PHP 中的前 20 个单词?

相关文章