Truncating custom fields

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.

Related posts

Leave a Reply

1 comment

  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>';