No hay ningún filtro que le permita configurar las etiquetas permitidas para que no sean eliminadas por the_excerpt()
. Podría decirse que un defecto del núcleo.
De todos modos, la generación del extracto real no ocurre en esa etiqueta de plantilla, sino en cualquier otra parte:
Los extractos son generados por la función wp_trim_excerpt()
, dentro de la cual se aplican los filtros de extractos que ya está utilizando ( excerpt_length
y excerpt_more
) y que llama a wp_trim_words()
, que a su vez llama a wp_strip_all_tags()
. Las tres funciones se encuentran en wp-includes/formatting.php
Por lo tanto, en ausencia de un filtro para el caso y la inevitabilidad de que su extracto se ejecute a través de wp_strip_all_tags()
, la única posibilidad de conservar algunas etiquetas es agregar una función de reemplazo personalizada para 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' );