问题描述
这是我的主页上的帖子摘录。我想用句子结尾摘录。在这种情况下,这是 「机会」 。 」 。我知道如何修改长度,但它不会做我想要的。
这是其他网站的摘录。在这里,您将看到摘录以与上述不同的句子结尾,以下一句’Proactively’ 的第一个单词结尾。
实施 solution by G.M. 后:
最佳解决方案
这需要 PHP 5.3+(WP 要求 PHP 5.2.4+)
add_filter('get_the_excerpt', 'end_with_sentence');
function end_with_sentence($excerpt) {
$allowed_end = array('.', '!', '?', '...');
$exc = explode( ' ', $excerpt );
$found = false;
$last = '';
while ( ! $found && ! empty($exc) ) {
$last = array_pop($exc);
$end = strrev( $last );
$found = in_array( $end{0}, $allowed_end );
}
return (! empty($exc)) ? $excerpt : rtrim(implode(' ', $exc) . ' ' .$last);
}
Edit
之后 @kaiser 评论我尝试运行这个在保存/更新,以防止页面减慢显示大量的帖子。这应该进行测试
add_filter('wp_insert_post_data', 'end_with_sentence_on_save', 20, 2);
function end_with_sentence_on_save($data, $postarr) {
if ( ! empty( $data['post_content'] ) && $data['post_status'] != 'inherit' && $data['post_status'] != 'trash' ) {
$text = strip_shortcodes( $data['post_content'] );
$text = apply_filters('the_content', $text );
$text = str_replace(']]>', ']]>', $text );
$excerpt_length = apply_filters('excerpt_length', 55);
$data['post_excerpt'] = wp_trim_words($text, $excerpt_length, '');
} else {
return $data;
}
$allowed_end = array('.', '!', '?', '...');
$exc = explode(' ', $data['post_excerpt']);
$found = false;
$last = '';
while ( ! $found && ! empty($exc) ) {
$last = array_pop($exc);
$end = strrev( $last );
$found = in_array( $end{0}, $allowed_end );
}
if (! empty($exc)) $data['post_excerpt'] = rtrim(implode(' ', $exc) . ' ' .$last);
return $data;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。