I’m using custom fields to pull a secondary description. I’d like to use the built in WordPress truncate but can’t seem to figure it out.
$desc = get_post_meta($post->ID, "youtube-desc", true); echo '<p>' . $desc . '</p>';
Any help would be appreciated.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
See the discussion for Taxonomy Short Description for a better way to shorten a string. I’m not aware of a WP function that is getting truncation right.
Here is my code based on the linked discussion:
/**
* 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 = "xC2xA0…" )
{
$string = strip_tags( $string );
$string = html_entity_decode( $string, ENT_QUOTES, 'utf-8' );
// xC2xA0 is the no-break space
$string = trim( $string, "nrt .-;–,—xC2xA0" );
$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 'ööööö …'
Add the function to your functions.php and change your code to:
echo '<p>' . utf8_truncate( $desc ) . '</p>';
You can also use it shorten a title:
echo '<h1>' . utf8_truncate( get_the_title() ) . '</h1>';
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0