comment puis-je inclure un saut de ligne dans the_excerpt. J'ai modifié la longueur et le bouton more via mon functions.php. J'utilise le teaser pour chaque entrée de blog et parfois, ça a l'air un peu moche, il n'y a pas de saut de ligne inclus.
Aucun filtre ne vous permettrait de définir les balises autorisées à ne pas supprimer par the_excerpt()
. On peut soutenir que c'est un défaut du noyau.
Quoi qu'il en soit, la génération d'extraits réelle ne se produit pas dans cette balise de modèle mais entièrement ailleurs:
Les extraits sont générés par la fonction wp_trim_excerpt()
, à l'intérieur de laquelle les filtres d'extraits que vous utilisez déjà (excerpt_length
et excerpt_more
) sont appliqués et qui appelle wp_trim_words()
, qui appelle wp_strip_all_tags()
. Les trois fonctions sont situées dans wp-includes/formating.php
Par conséquent, en l'absence d'un filtre pour le cas et de l'inévitabilité de votre extrait traversant wp_strip_all_tags()
, la seule possibilité de conserver certaines balises consiste à ajouter une fonction de remplacement personnalisée pour wp_trim_excerpt()
:
function wpse67498_wp_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( ']]>', ']]>', $text );
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[...]' );
$allowable = '<br>';
$text = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $text );
$text = trim( strip_tags( $text, $allowable ) );
if ( 'characters' == _x( 'words', 'Word count: words or characters?' )
&& preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) )
{
$text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
preg_match_all( '/./u', $text, $words_array );
$words_array = array_slice( $words_array[0], 0, $num_words + 1 );
$sep = '';
} else {
$words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
$sep = ' ';
}
if ( count( $words_array ) > $excerpt_length ) {
array_pop( $words_array );
$text = implode( $sep, $words_array );
$text = $text . $excerpt_more;
} else {
$text = implode( $sep, $words_array );
}
}
return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt );
}
remove_filter( 'get_the_excerpt', 'wp_trim_excerpt');
add_filter( 'get_the_excerpt', 'wpse67498_wp_trim_excerpt' );
Comme pour la solution de Johannes Pille, la solution suivante devrait être plus adaptative.
En détail:
Voici le code complet:
// append to themes/{your_theme}/functions.php
define('EXCERPT_RARELY', '{[}]');
define('EXCERPT_BR', nl2br(PHP_EOL));
function wp_trim_excerpt_custom($text = '')
{
add_filter('the_content', 'wp_trim_excerpt_custom_mark', 6);
// get through Origin filter
$text = wp_trim_excerpt($text);
remove_filter('the_content', 'wp_trim_excerpt_custom_mark');
return wp_trim_excerpt_custom_restore($text);
}
function wp_trim_excerpt_custom_mark($text)
{
$text = nl2br($text);
return str_replace(EXCERPT_BR, EXCERPT_RARELY, $text);
}
function wp_trim_excerpt_custom_restore($text)
{
return str_replace(EXCERPT_RARELY, EXCERPT_BR, $text);
}
// remove default filter
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
// add custom filter
add_filter('get_the_excerpt', 'wp_trim_excerpt_custom');
Pour le moment, il est possible d’utiliser la fonction the_excerpt()
pour afficher l’extrait avec les sauts de ligne. Mais si vous voulez retourner le résultat, vous pouvez utiliser à cet effet une fonction comme celle-ci:
function get_the_excerpt_theme() {
$excerpt = get_the_excerpt();
$excerpt = apply_filters( 'the_excerpt', $excerpt );
return $excerpt;
}
Il applique un filtre à l'extrait à l'aide de apply_filters('the_excerpt', $excerpt )
comme dans la fonction wp the_excerpt()
mais renvoie la chaîne sans l'afficher.
De plus, si vous souhaitez n'autoriser que les sauts de ligne dans l'extrait, vous pouvez ajouter $excerpt = strip_tags($excerpt,'<br>')
en dessous de la ligne apply_filters
.
J'espère que ça aide!
pourrait également utiliser la fonction nl2br () de PHP:
echo nl2br(get_the_excerpt());
-- ou --
nl2br(the_excerpt());