Truncando comprimentos variables ​​de informação

Eu fui ajudado não há muito tempo com uma forma de truncado personalizado por Toscho nesta publicação, ele funciona muito bem, mas estou descobrindo que preciso criar múltiplas variações de comprimento para diferentes partes de conteúdo. Por exemplo, na minha página de suporte, preciso de 80 max_chars vs. minha página inicial, que eu preciso de 200 max_chars.

Eu tentei adicionar uma segunda instância desta function, mas, sem surpresa, matou totalmente outros aspectos do meu site.

Como sempre, qualquer ajuda seria apreciada. Obrigado rapazes!

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

Solutions Collecting From Web of "Truncando comprimentos variables ​​de informação"

Eu sei que toscho não gosta muito disso, mas de qualquer forma: Converteu os args de input em uma matriz:

 function utf8_truncate( $args = array( 'string' => null, 'max_chars' => 200, 'append' => "\xC2\xA0…" ) ) { $args['string'] = strip_tags( $args['string'] ); $args['string'] = html_entity_decode( $args['string'], ENT_QUOTES, 'utf-8' ); // \xC2\xA0 is the no-break space $args['string'] = trim( $args['string'], "\n\r\t .-;–,—\xC2\xA0" ); $length = strlen( utf8_decode( $args['string'] ) ); // Nothing to do. if ( $length < $args['max_chars'] ) { return $args['string']; } // mb_substr() is in /wp-includes/compat.php as a fallback if // your the current PHP installation doesn't have it. $args['string'] = mb_substr( $args['string'], 0, $args['max_chars'], 'utf-8' ); // No white space. One long word or chinese/korean/japanese text. if ( FALSE === strpos( $args['string'], ' ' ) ) { return $args['string'] . $args['append']; } // Avoid breaks within words. Find the last white space. if ( extension_loaded( 'mbstring' ) ) { $pos = mb_strrpos( $args['string'], ' ', 'utf-8' ); $short = mb_substr( $args['string'], 0, $pos, 'utf-8' ); } else { // Workaround. May be slow on long strings. $words = explode( ' ', $args['string'] ); // Drop the last word. array_pop( $words ); $short = implode( ' ', $words ); } return $short . $args['append']; } 

Isso permite usá-lo assim (você perdeu o uso de matrizes de qualquer maneira) :

 $args = array( 'string' => 'bla' ,'max_chars' => 50 // INPUT LENGTH HERE ); echo '

' . utf8_truncate( $args ) . '

';

Você também pode mudar isso sob demanda:

 if ( is_page() ) { $args['max_chars'] = 100; } elseif ( is_archive() ) { $args['max_chars'] = 50; } elseif ( is_whatever() ) ... etc ... }