今天(2022-8月2号)看有很多小伙伴的摘要功能出bug了,我看了一下我的网站,也bug了。
为什么会出这个bug?
问题在:
出bug的都是使用了官方函数wp_trim_words()自动获取文章内容成为摘要。
官方函数:
wp_trim_words( string $text, int $num_words = 55, string $more = null )
Trims text to a certain number of words.(将文本裁剪为一定数量的单词。)
目前wp自带的字符截取函数wp_trim_words(),不能正确截取字符串长度,已单独测试无效。单独中英文,数字,都不能截取。
修复代码如下,复制放到当前主题函数文件functions.php就可以了。网站后台->外观->主题文件编辑器->模板函数(functions.php)
/**
* 字符截断函数
* @since onlyfront 1.0
* @$str 要截取的字符串
* @$start 开始位置
* @$long 长度
* @$trimmarker 后缀
*/
function short_string($str ,$start , $long ,$trimmarker ){
$output = mb_substr($str,$start,$long,'utf-8');
$strlen = mb_strlen($str,'utf-8');
if($strlen > $long){
return $output.$trimmarker;
}else{
return $output;
}
}
/**
* 自动获取摘要
* @since onlyfront 1.0
*/
function wper_auto_excerpt($excerpt) {
global $post;
if ( has_excerpt() && ! is_attachment() ) {
$excerpt = wp_strip_all_tags($post->post_excerpt,true);
}else{
$seo_desc = get_post_meta($post->ID,'seo_desc',true);
if($seo_desc){
$excerpt = $seo_desc;
}else{
$excerpt = short_string(wp_strip_all_tags($post->post_content,true),0,55,'...');
// 更新摘要 二选一 ,更新了之后下次就不会再重复从文章内容截取,能有效提高速度
// 1、更新摘要到自定义字段
//update_post_meta($post->ID,'seo_desc',$excerpt);
// 2、更新摘要到post_excerpt
wp_update_post( array(
'ID' => $post->ID,
'post_excerpt' => $excerpt
) );
}
}
return $excerpt;
}
add_filter( 'get_the_excerpt', 'wper_auto_excerpt' );