我现在正在努力争取这个半天,我似乎无法做到正确。我在自己的wordpress网站上有一个自定义功能,可自动创建一个摘录。这一切都很顺利,但对于一些(我猜逻辑)原因,它也会切断<br />
标签,因为它有一个空格。
如何解决这个问题?这与preg_split函数有关吗?
以下是我的代码:
function custom_wp_trim_excerpt($text) {
$raw_excerpt = $text;
if ( '' == $text ) {
//Retrieve the post content.
$text = get_the_content('');
//Delete all shortcode tags from the content.
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$allowed_tags = '<p>,<br>,<br/>,<br />,<a>,<em>,<strong>,<img>'; /*** MODIFY THIS. Add the allowed HTML tags separated by a comma.***/
$text = strip_tags($text, $allowed_tags);
$excerpt_word_count = 40; /*** MODIFY THIS. change the excerpt word count to any integer you like.***/
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$excerpt_end = ' <a href="'. get_permalink($post->ID) . '">' . '...' . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length && $words ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'custom_wp_trim_excerpt');
谢谢!
答案 0 :(得分:0)
您可以添加此项以使所有HTML中断字符相同:
$text = preg_replace('!<br ?/>!i','<br>',$text);
在这些行之前:
$allowed_tags = '<p>,<br>,<a>,<em>,<strong>,<img>'; /*** MODIFY THIS. Add the allowed HTML tags separated by a comma.***/
$text = strip_tags($text, $allowed_tags);
当您执行preg_split("/[\n\r\t ]+/",$text)
时,您将分隔中断<br />
字符中的空格。
您还可以在preg_split()
语句中简化正则表达式:
$words = preg_split("!\s+!", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
由于您允许使用其他标签,因此它们可能也包含空格。