Не так давно мне помогла форма пользовательского усечения от Toscho в этом посте, она работает очень хорошо, но я обнаружил, что мне нужно создать несколько вариантов длины для разных частей контента. Например, на моей странице поддержки мне нужно 80 max_chars по сравнению с моей домашней страницей, на которой мне нужно 200 max_chars.
Я попытался добавить второй экземпляр этой функции, но неудивительно, что это полностью убило другие аспекты моего сайта.
Как всегда, любая помощь будет оценена по достоинству. Спасибо, парни!
function utf8_truncate( $string, $max_chars = 200, $append = "\xC2\xA0…" )
{
$string = strip_tags( $string );
$string = html_entity_decode( $string, ENT_QUOTES, 'utf-8' );
// \xC2\xA0 is the no-break space
$string = trim( $string, "\n\r\t .-;–,—\xC2\xA0" );
$length = strlen( utf8_decode( $string ) );
// Nothing to do.
if ( $length < $max_chars )
{
return $string;
}
// mb_substr() is in /wp-includes/compat.php as a fallback if
// your the current PHP installation doesn't have it.
$string = mb_substr( $string, 0, $max_chars, 'utf-8' );
// No white space. One long word or chinese/korean/japanese text.
if ( FALSE === strpos( $string, ' ' ) )
{
return $string . $append;
}
// Avoid breaks within words. Find the last white space.
if ( extension_loaded( 'mbstring' ) )
{
$pos = mb_strrpos( $string, ' ', 'utf-8' );
$short = mb_substr( $string, 0, $pos, 'utf-8' );
}
else
{
// Workaround. May be slow on long strings.
$words = explode( ' ', $string );
// Drop the last word.
array_pop( $words );
$short = implode( ' ', $words );
}
return $short . $append;
}
Я знаю, что toscho это не очень нравится, но в любом случае: преобразовал входные аргументы в массив:
Это позволяет использовать его так (возможно, вы все равно пропустили, как использовать массивы) :
Вы также можете переключить это по требованию: