Как ограничить количество символов в отрывке?

30 окт. 2012 г., 06:47:12
Просмотры: 136K
Голосов: 12

Возможный дубликат:
отрывок в символах

У меня возник вопрос после прочтения этого поста (Как подсветить поисковые термины без плагина). Мне очень нравится эта функция (Поисковый Термин Без Плагина), но длина символов слишком большая. Какой PHP-код нужно добавить, чтобы сделать отрывок короче? Буду признателен, если кто-то сможет предложить решение. Спасибо!

0
Все ответы на вопрос 2
4
33

В дополнение к вышеуказанному хуку фильтра, предоставленному в ответе Deepa, вот еще одна функция, которая может помочь расширить использование the_excerpt двумя способами:

Позволяет вам...

Ограничить отрывок по количеству символов, но НЕ обрезать последнее слово. Это позволит вам вернуть максимальное количество символов, сохраняя при этом полные слова, так что возвращаются только слова, которые помещаются в указанный лимит, а также позволяет указать источник, откуда будет взят отрывок.

function get_excerpt($limit, $source = null){

    $excerpt = $source == "content" ? get_the_content() : get_the_excerpt();
    $excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
    $excerpt = strip_shortcodes($excerpt);
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $limit);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
    $excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">подробнее</a>';
    return $excerpt;
}

/*
Пример...  Lorem ipsum habitant morbi (26 символов всего) 

Возвращает первые три слова, что составляет ровно 21 символ, включая пробелы
Пример..  echo get_excerpt(21);  
Результат...  Lorem ipsum habitant 

Возвращает то же, что и выше, недостаточно символов в лимите для возврата последнего слова
Пример..  echo get_excerpt(24);    
Результат...  Lorem ipsum habitant  

Возвращает все 26 символов нашего контента, задан лимит в 30 символов, но нужно только 26. 
Пример..  echo get_excerpt(30);    
Результат...  Lorem ipsum habitant morbi
*/

Эту функцию можно использовать многократно в файлах темы, каждый раз с разными ограничениями по количеству символов.

Эта функция имеет возможность извлекать отрывок из:

  • the_content
  • the_excerpt

Например, если у вас есть записи, содержащие текст в поле the_excerpt в редакторе записей, но для особого случая нужно получить отрывок из тела the_content, вы можете сделать так:

get_excerpt(140, 'the_content'); //отрывок берется из get_the_content

Это указывает функции, что вы хотите получить первые 140 символов из the_content, независимо от того, установлен ли отрывок в поле the_excerpt.

get_excerpt(140); //отрывок берется из get_the_excerpt

Это указывает функции, что вы хотите получить первые 140 символов сначала из the_excerpt, и если отрывок не существует, в качестве резервного варианта будет использован the_content.

Функцию можно улучшить, чтобы сделать ее более эффективной, или интегрировать с использованием фильтров WordPress как для the_content, так и для the_excerpt, либо просто использовать как есть в ситуациях, когда нет подходящей встроенной альтернативы в API WordPress.

30 окт. 2012 г. 10:36:23
Комментарии

Привет! Спасибо всем за предоставленные ответы! Хотелось бы спросить, как сделать, чтобы в конце анонса вместо [...] были ...?

Jornes Jornes
2 нояб. 2012 г. 07:24:05

Последняя строка $excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">подробнее</a>'; - это то, что вы можете использовать для определения вашей ссылки "читать далее". Как видите, там добавляется многоточие, но вы можете добавить что угодно.

Adam Adam
2 нояб. 2012 г. 07:36:43

@Jornes возможно, это на 6 лет поздно, но вот HTML-код для многоточия &hellip;

AlbertSamuel AlbertSamuel
20 июл. 2018 г. 10:26:41

@AlbertSamuel Спасибо за ответ. :)

Jornes Jornes
10 мая 2019 г. 09:42:46
4
22

добавьте эти строки в файл function.php

function custom_excerpt_length( $length ) {
        return 20;
    }
    add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
30 окт. 2012 г. 07:10:18
Комментарии

Это ограничивает количество слов до 20, а не символов.

Ionut Necula Ionut Necula
7 дек. 2016 г. 17:48:51

Почему мы добавили число 999 здесь?

Navnish Bhardwaj Navnish Bhardwaj
11 апр. 2018 г. 10:49:03

@NavnishBhardwaj 999 — это приоритет загрузки фильтра. Подробнее можно узнать здесь. https://developer.wordpress.org/reference/functions/add_filter/

Annapurna Annapurna
18 апр. 2018 г. 09:33:59

@dipali Установка длины анонса поможет уменьшить размер базы данных?

Anand Somani Anand Somani
22 нояб. 2022 г. 00:12:28