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?
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 )