Ограничить длину краткого описания товара в Woocommerce

4

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

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

Любая помощь будет оценена по достоинству.

Спасибо.

Теги:
woocommerce
products
hook-woocommerce

2 ответа

2
Лучший ответ

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

Ваш код подсчитывает буквы с пробелами, вместо этого код, приведенный ниже, обозначает слова без пробелов. Пожалуйста, Посмотрите этот живой файл php в действии (здесь результат вашего кода на строку, содержащую 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>';
    }
}

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

Этот код основан на этом потоке: Как я могу обрезать строку до первых 20 слов в PHP?

  • 0
    Спасибо за код LoicTheAztec! К сожалению, это совсем не помогает сократить длину описания. У вас есть другие идеи, почему оригинальный код не будет работать после 14 символов? Я пробовал с разными темами WordPress, но это не имело значения.
  • 0
    По какой-то причине я думал, что ваш исходный код состоит из символов, а не слов. Так что это работает! Спасибо вам большое!
Показать ещё 3 комментария
0

Вы можете ограничить описание продукта WooCommerce

используйте этот код -

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

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

Используйте этот код для изменить Ограничение на странице магазина, а не на странице продукта.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню