Минимальная длина обрезки текста excerpt в wordpress?

Есть кастомный код, который обрезает the_excerpt() до первой точки.

function strpos_arr($haystack, $needle) {
    if(!is_array($needle)) $needle = array($needle);
    foreach($needle as $what) {
        if(($pos = strpos($haystack, $what))!==false)  $pos_arr[] = $pos;
    }
    return is_array($pos_arr) ? min($pos_arr) : $pos;
}
add_filter(
  'the_excerpt',
  function ($excerpt) {
    return substr($excerpt,0,strpos_arr($excerpt,array('.', '?'))+1);
  }
);

Проблема в том, что если первая точка слишком рано, например, предложение состоит из одного слова, то смотрится как-то не очень. Подскажите, пожалуйста, как добавить в этот код возможность задавать минимальное кол-во символов до первой точки. Т.е. если первая точка ранее, чем заданное кол-во символов, то обрезка текста происходит на второй точке.
  • Вопрос задан
  • 292 просмотра
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix
Java Software Engineer
Здравствуйте!
Для ограничения длины отрывка я использую следующий код:
function get_excerpt($limit, $source = null){

    if($source == "content" ? ($excerpt = get_the_content()) : ($excerpt = 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.' ...';
    return $excerpt;
}


Вдруг вам поможет....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы