web-dev-qa-db-fra.com

Arrêtez strip_shortcodes () en supprimant le contenu dans les codes courts

J'ai ce shortcode:

add_shortcode('refer', function($atts, $text)
{
    $defaults = ['link' => '', 'nofollow' => true];
    $atts     = shortcode_atts($defaults, $atts, 'refer' );
    $nofollow = $atts['nofollow'] ? 'rel="nofollow"' : 'external';

    return sprintf('<a href="%s" %s>%s</a>', esc_url($atts['link']), $nofollow, $text);
});

avec le contenu du post de démonstration:

[refer link = "http://www.lipsum.com"] Lorem Ipsum [/ refer] est simplement un texte factice de l'industrie de l'impression et de la composition. [refer link = "http://www.lipsum.com"] Lorem Ipsum [/ refer] est le texte factice standard depuis les années 1500, quand un imprimeur inconnu a pris une galère de type et l'a brouillé pour en faire un spécimen. livre. Il a survécu non seulement à cinq siècles, mais aussi au saut dans la composition électronique, demeurant essentiellement inchangé. Il a été popularisé dans les années 1960 avec la publication de feuilles Letraset contenant des passages de [réf. Lien = "http://www.lipsum.com"] Lorem Ipsum [/ ref], et plus récemment avec un logiciel de publication assistée par ordinateur comme Aldus PageMaker comprenant des versions de Lorem Ipsum.

La boucle pour faire écho à l'extrait:

while ( have_posts() ) : the_post();
    the_excerpt();
endwhile;

Le résultat:

est simplement un texte factice de l'industrie de l'impression et de la composition. est le texte factice standard depuis les années 1500, quand un imprimeur inconnu a pris une galère de type et l’a brouillé pour en faire un cahier type. Il a survécu non seulement à cinq siècles, mais aussi au saut dans la composition électronique, demeurant essentiellement inchangé. […]

Notez que tous les mots Lorem Ipsum ont été retirés de l’extrait.

Après avoir examiné the_excerpt () et d’autres fonctions connexes, j’ai découvert que le problème était causé par strip_shortcodes () inside wp_trim_excerpt function.

Mais comme strip_shortcodes() n'a pas de filtres, comment puis-je changer son comportement?

3
MinhTri

Essayez les filtres dans votre functions.php:

add_filter( 'the_excerpt', 'shortcode_unautop');
add_filter( 'the_excerpt', 'do_shortcode');

Accessoires: @bainternet ( Source )

Ou utilisez votre propre filtre sur get_the_excerpt. Mettez ceci dans le functions.php de votre thème:

function custom_excerpt($text = '') {
    $raw_excerpt = $text;
    if ( '' == $text ) {
        $text = get_the_content('');
                // $text = strip_shortcodes( $text );
        $text = do_shortcode( $text );
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters('excerpt_length', 55);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
remove_filter( 'get_the_excerpt', 'wp_trim_excerpt'  );
add_filter( 'get_the_excerpt', 'custom_excerpt'  );

Cela autorisera les shortcodes dans the_excerpt().

Les accessoires de @keesiemeijer ( source )

4
Mayeenul Islam