没有允许您将允许的标记设置为不被删除的筛选器the_excerpt()
. 可以说是核心的一个缺点。
无论如何,实际的摘录生成不会发生在该模板标记中,而是完全发生在其他地方:
摘录由函数生成wp_trim_excerpt()
, 其中包含您已经使用的摘录过滤器(excerpt_length
和excerpt_more
) 应用了哪些调用wp_trim_words()
, 这反过来又要求wp_strip_all_tags()
. 这三个函数都位于wp include/formatting中。php
因此,在没有案例过滤器的情况下,不可避免地会出现你的摘录wp_strip_all_tags()
, 保留某些标记的唯一可能性是为添加自定义替换函数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\' );