Comment afficher des liens dans un extrait? [dupliquer]

Oct 03 2020

Je ne suis pas en mesure de voir comment afficher des liens dans des extraits.

Un certain nombre d'articles suggèrent d'essayer quelque chose du genre suivant, mais je ne suis pas en mesure de rendre les liens dans des extraits. Qu'est-ce que je manque?

Dans functions.phpmon thème, je définis:

function improved_trim_excerpt( $text = '', $post = null ) {
$raw_excerpt = $text;

if ( '' === trim( $text ) ) { $post = get_post( $post ); $text =  get_the_content( '', false, $post ); $text = strip_shortcodes( $text ); $text = excerpt_remove_blocks( $text ); /** This filter is documented in wp-includes/post-template.php */ $text = apply_filters( 'the_content', $text ); $text = str_replace( ']]>', ']]&gt;', $text ); $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text); $text = strip_tags($text, '<p>'); // to keep par $text = strip_tags($text, '<a>'); // to keep links /* translators: Maximum number of words used in a post excerpt. */ $excerpt_length = intval( _x( '55', 'excerpt_length' ) );

    /**
     * Filters the maximum number of words in a post excerpt.
     *
     * @since 2.7.0
     *
     * @param int $number The maximum number of words. Default 55. */ $excerpt_length = (int) apply_filters( 'excerpt_length', $excerpt_length ); /** * Filters the string in the "more" link displayed after a trimmed excerpt. * * @since 2.9.0 * * @param string $more_string The string shown within the more link.
     */
    $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' ); $text         = wp_trim_words( $text, $excerpt_length, $excerpt_more ); } /** * Filters the trimmed excerpt string. * * @since 2.8.0 * * @param string $text        The trimmed text.
 * @param string $raw_excerpt The text prior to trimming. */ return apply_filters( 'improved_trim_excerpt', $text, $raw_excerpt );
}

et j'ajoute les lignes suivantes dans mon content.php

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');
$main_content = apply_filters( 'the_content', get_the_excerpt() );

Réponses

Trisha Oct 06 2020 at 19:34

Tout d'abord, je vous suggère de combiner vos balises p et a en une seule ligne, comme ceci:

$text = strip_tags($text, '<p><a>'); 

Deuxièmement, le remove_filter et le add_filter devraient aller dans votre fichier functions.php, pas content.php ..... déplacer ces lignes juste en dessous de $ text = strip_tags .....

Je ne pense pas que vous ayez besoin de la ligne qui a $ main_content = apply_filters comme je n'ai jamais vu cela utilisé auparavant. Essayez-le sans lui et après avoir déplacé les deux autres lignes, mais si vous trouvez que vous en avez besoin, il ira également dans votre fichier functions.php.

EDITED: Voici mon code complet, au cas où cela aiderait quelqu'un d'autre. Cela fonctionne parfaitement pour préserver les caractères gras (et), les italiques (et) et les liens (). Ce sont les seules balises que j'autorise dans mes extraits mais qui peuvent être modifiées en fonction de vos besoins. CECI va dans le fichier functions.php de mon thème enfant afin qu'il soit à l'abri des mises à jour du thème.

    // Improves the look of the excerpt, more words, allows bolding
function improved_trim_excerpt($text) { $raw_excerpt = $text; if ( '' == $text ) {
    $text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace('\]\]\>', ']]&gt;', $text); $text = strip_tags($text, '<b><strong><em><i><a>'); $excerpt_length = apply_filters('excerpt_length', 45);
    $newexcerpt_more = apply_filters('excerpt_more', 'new_excerpt_more'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    if ( count($words) > $excerpt_length ) {
        array_pop($words); $text = implode(' ', $words); $text = $text . $newexcerpt_more;
        $text = force_balance_tags( $text );
    } else {
        $text = implode(' ', $words);
        $text = force_balance_tags( $text );
    }
}
return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');