请参见discussion for Taxonomy Short Description 为了更好地缩短字符串。我不知道有一个WP函数可以正确地进行截断。
以下是我基于链接讨论的代码:
/**
* Shortens an UTF-8 encoded string without breaking words.
*
* @param string $string string to shorten
* @param int $max_chars maximal length in characters
* @param string $append replacement for truncated words.
* @return string
*/
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;
}
Test
print utf8_truncate( \'ööööö ööööö\' , 10 );
// prints \'ööööö …\'
将函数添加到
functions.php
并将代码更改为:
echo \'<p>\' . utf8_truncate( $desc ) . \'</p>\';
您还可以使用它来缩短标题:
echo \'<h1>\' . utf8_truncate( get_the_title() ) . \'</h1>\';