web-dev-qa-db-fra.com

Tronquer des champs personnalisés

J'utilise des champs personnalisés pour extraire une description secondaire. Je voudrais utiliser le WordPress tronqué intégré, mais n'arrive pas à le comprendre.

$desc = get_post_meta($post->ID, "youtube-desc", true);
echo '<p>' . $desc . '</p>';

Toute aide serait appréciée.

7
Zach Shallbetter

Voir la discussion pour la taxonomie Description courte pour un meilleur moyen de raccourcir une chaîne. Je ne connais pas de fonction WP dont la troncature est correcte.

Voici mon code basé sur la discussion liée:

/**
 * 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 'ööööö …'

Ajoutez la fonction à votre functions.php et changez votre code en:

echo '<p>' . utf8_truncate( $desc ) . '</p>';

Vous pouvez également l'utiliser pour raccourcir un titre:

echo '<h1>' . utf8_truncate( get_the_title() ) . '</h1>';
10
fuxia