web-dev-qa-db-fra.com

Comment limiter correctement le contenu et supprimer le code HTML?

J'utilise ce code depuis longtemps:

$temp_arr_content = explode(
    " ",
    substr(
        strip_tags(
            get_the_content()
        ),
        0,
        720
    )
);
$temp_arr_content[count( $temp_arr_content ) - 1] = "";
$display_arr_content = implode( " ", $temp_arr_content );
echo $display_arr_content;
if( strlen( strip_tags( get_the_content() ) ) > 0 )
    echo "...";

Pour limiter mon contenu à 720 caractères et en supprimer le code HTML
Cependant, aujourd’hui, je l’ai réutilisé dans mon nouveau thème, mais j’ai remarqué qu’il produisait également les codes HTML (le code HTML ne fonctionne pas, mais s’affiche dans le contenu).

J'ai aussi utilisé ce code dans mon thème:

$excerpt = get_the_excerpt();
echo string_limit_words( $excerpt, 55 );

et ce code sur mon Function.php:

function string_limit_words( $string, $Word_limit ) {
    $words = explode( ' ', $string, ( $Word_limit + 1 ) );
    if( count( $words ) > $Word_limit )
        array_pop( $words );
    return implode( ' ', $words );
}

pour limiter les mots et supprimer le code HTML, cependant, lorsque je passe de 55 à 150, le code ne fonctionne pas et affiche toujours 55 mots.
Quelqu'un peut-il m'aider à résoudre ce problème? Merci

2
Dave

Premièrement, je ne modifierais pas la longueur de la chaîne/mot du contenu . Sémantiquement, vous avez affaire à un extrait , alors concentrons-nous là-dessus.

Deuxièmement, pour limiter le nombre de mots renvoyés pour l'extrait, filtrez simplement excerpt_length :

<?php
function wpse52673_filter_excerpt_length( $length ) {
    // Return (integer) value for
    // Word-length of excerpt
    return 150;
}
add_filter( 'excerpt_length', 'wpse52673_filter_excerpt_length' );
?>

L'avantage supplémentaire d'utiliser the_excerpt() est que, pour les extraits générés automatiquement, aucun code HTML n'est analysé . Donc, si vous n'utilisez pas d'extraits définis par l'utilisateur, vous avez terminé.

Cependant, si vous do utilisez des extraits générés par l'utilisateur, mais que vous souhaitez toujours supprimer les balises HTML, supprimez simplement l'un ou tous les filtres suivants qui sont appliqués à the_excerpt :

add_filter( 'the_excerpt',     'wptexturize'      );
add_filter( 'the_excerpt',     'convert_smilies'  );
add_filter( 'the_excerpt',     'convert_chars'    );
add_filter( 'the_excerpt',     'wpautop'          );
add_filter( 'the_excerpt',     'shortcode_unautop');

Pour en supprimer un, appelez simplement, par exemple:

remove_filter( 'the_excerpt', 'wptexturize' );
1
Chip Bennett