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