web-dev-qa-db-fra.com

Comment inclure le HTML dans les extraits?

J'utilise le thème Feuille

et je n'arrive pas à formater les extraits de la page d'accueil.

J'ai essayé des plugins et bidouiller avec le fichier theme-functions.php mais en vain.

Je n'ai pas besoin de beaucoup d'éléments sophistiqués dans les extraits, juste un peu de formatage, rien de plus.

Cela devrait être possible, non?

1
user37445

L'extrait est créé dans -> wp-includes/formating.php avec ce code:

function wp_trim_excerpt($text) { // Fakes an excerpt if needed
    global $post;
    if ( '' == $text ) {
        $text = get_the_content('');
        $text = apply_filters('the_content', $text);
        $text = str_replace('\]\]\>', ']]>', $text);
        $text = strip_tags($text);
        $excerpt_length = 55;
        $words = explode(' ', $text, $excerpt_length + 1);
        if (count($words)> $excerpt_length) {
            array_pop($words);
            array_Push($words, '[...]');
            $text = implode(' ', $words);
        }
    }
    return $text;
}

Pour modifier le comportement WP présente normalement des extraits, supprimez d'abord cette fonction (pas du code principal, mais utilisez remove_filter () en le plaçant dans votre functions.php:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');

Ensuite, vous devrez créer une nouvelle fonction pour contrôler les extraits afin de pouvoir copier la fonction ci-dessus à partir de WP core comme point de départ. Nommez-le quelque chose de différent. Ensuite, changez ce dont vous avez besoin. Par exemple, si vous souhaitez autoriser la balise dans vos extraits, vous pouvez modifier cette ligne:

$text = strip_tags($text);

pour ça:

$text = strip_tags($text, '<b>');

Si vous avez besoin de plusieurs balises HTML autorisées, listez-les après. Donc, votre nouvelle fonction dans votre functions.php pourrait ressembler à:

function nb_html_excerpt($text) {
    global $post;
    if ( '' == $text ) {
        $text = get_the_content('');
        $text = apply_filters('the_content', $text);
        $text = str_replace('\]\]\>', ']]&gt;', $text);
        $text = strip_tags($text, '<b>');
        $excerpt_length = 55;
        $words = explode(' ', $text, $excerpt_length + 1);
        if (count($words)> $excerpt_length) {
            array_pop($words);
            array_Push($words, '[...]');
            $text = implode(' ', $words);
        }
    }
    return $text;
}

Et enfin, vous devez dire à WP de filtrer votre extrait à travers votre nouvelle fonction. Ajoutez le filtre comme ceci dans functions.php:

add_filter('get_the_excerpt', 'nb_html_excerpt');
5
NickJAB