我有这个习惯wp_trim_words()
函数集只提供20个单词的摘录,在大多数情况下,它工作得很好。除某些原因外,在包含列表的帖子上,它输出的单词超过20个。(See the posts at the bottom of this page.) 我怎样才能解决这个问题?我试图删除<ul>,<ol>,<li>,
从function insight_allowedtags()
但那没什么用。
理想情况下,我希望自定义摘录输出至少20个单词,并在句子末尾结束,无论帖子是否包含列表。
这是我正在使用的自定义函数(as suggested in this post):
// Custom Excerpt for Insights Posts on Insights Page & Category Pages
function insight_allowedtags() {
// Add custom tags to this string
return \'<script>,<style>,<span>,<ul>,<ol>,<li>,<a>,<p>\';
}
if ( ! function_exists( \'insight_custom_wp_trim_excerpt\' ) ) :
function insight_custom_wp_trim_excerpt($insight_excerpt) {
global $post;
$raw_excerpt = $insight_excerpt;
if ( \'\' == $insight_excerpt ) {
$insight_excerpt = get_the_content(\'\');
$insight_excerpt = strip_shortcodes( $insight_excerpt );
$insight_excerpt = apply_filters(\'the_content\', $insight_excerpt);
$insight_excerpt = str_replace(\']]>\', \']]>\', $insight_excerpt);
$insight_excerpt = strip_tags($insight_excerpt, insight_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */
//Set the excerpt word count and only break after sentence is complete.
$excerpt_word_count = 20;
$excerpt_length = apply_filters(\'excerpt_length\', $excerpt_word_count);
$tokens = array();
$excerptOutput = \'\';
$count = 0;
// Divide the string into tokens; HTML tags, or words, followed by any whitespace
preg_match_all(\'/(<[^>]+>|[^<>\\s]+)\\s*/u\', $insight_excerpt, $tokens);
foreach ($tokens[0] as $token) {
if ($count >= $excerpt_word_count && preg_match(\'/[\\,\\;\\?\\.\\!]\\s*$/uS\', $token)) {
// Limit reached, continue until , ; ? . or ! occur at the end
$excerptOutput .= trim($token);
break;
}
// Add words to complete sentence
$count++;
// Append what\'s left of the token
$excerptOutput .= $token;
}
$insight_excerpt = trim(force_balance_tags($excerptOutput));
// $excerpt_end = \' <a href="\'. esc_url( get_permalink() ) . \'">\' . sprintf(__( \'Read more about %s »\', \'wpse\' ), get_the_title()) . \'</a>\';
// $excerpt_more = apply_filters(\'excerpt_more\', \' \' . $excerpt_end);
//$pos = strrpos($wpse_excerpt, \'</\');
//if ($pos !== false)
// Inside last HTML tag
//$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
//else
// After the content
$insight_excerpt .= $excerpt_end; /*Add read more in new paragraph */
return $insight_excerpt;
}
return apply_filters(\'insight_custom_wp_trim_excerpt\', $insight_excerpt, $raw_excerpt);
}
endif;
remove_filter(\'get_the_excerpt\', \'wp_trim_excerpt\');
add_filter(\'get_the_excerpt\', \'wpse_custom_wp_trim_excerpt\', \'blog_custom_wp_trim_excerpt\', \'event_custom_wp_trim_excerpt\', \'insight_custom_wp_trim_excerpt\');