#精品
解决 WordPress 中文网站的摘录字数统计不准确的问题

2025-01-12 0 321

在 WordPress 中,一些主题或插件会提供自定义显示摘录字数的选项,但对于中文网站而言,这些选项有时候形同虚设。设置的限制字数是不准确的,这是为什么呢?如何解决这个问题,本文将给出完整解决方案。

get_the_excerpt() 函数

该函数会生成完整帖子内​​容的精简版本,一般的用来过滤摘录。如果此函数在 The Loop 之外使用并且帖子没有自定义摘录,则此函数将使用wp_trim_excerpt()生成摘录。

任何主题和插件,如果符合 WordPress 编码规范的话,都会用 get_the_excerpt() 函数来过滤文章摘要。

在执行 get_the_excerpt() 函数时,还会应用excerpt_length过滤器来限制摘录的长度(默认55个字)。

如果主题或插件修改了默认值,则输出的摘录长度也会改变。不过中文和英语不同,一个是字符语言,一个是字母语言,所以excerpt_length过滤器默认限制摘录的长度对中文而言会不准确。

本文提供的解决方案会用到 WordPress 提供的 apply_filters ( \'get_the_excerpt\', string $post_excerpt , WP_Post $post ) 钩子来解决问题,如果使用的主题或插件的摘录功能不是调用该函数的话,那么下面的解决方案将无法生效,只能联系开发者解决问题。

解决方案

/**
  * 过滤摘录,限制中文字符串。
  *
  * 代码添加到当前主题的functions.php文件中,代码出自813站长大咖
  */
function filter_chinese_excerpt($excerpt){

    // 中文摘录限制长度。 在这里设置你的限制字数!
    $limit = 130;

    // 末尾装饰 ([...])
    $decoration = \'[…]\';

    // 如果是中文
    if(preg_match(\"/\\p{Han}+/u\", $excerpt)){

        // 如果更长,则限制在字符串末尾添加装饰。
        // 同时返回字符串
        if(mb_strlen($excerpt, \'UTF-8\') >= $limit){
             return mb_substr($excerpt, 0, $limit, \'UTF-8\') . $decoration;
         }else{
             return mb_substr($excerpt, 0, $limit, \'UTF-8\');
         }
    }
    return $excerpt;
}
add_filter(\'get_the_excerpt\', \'filter_chinese_excerpt\');

以上代码会检测帖子摘录是不是中文内容,如果是的话,使用 PHP 提供的几个多字节字符串函数。如果不是中文内容,则不影响 WordPress 默认设置。

在 GeneratePress 主题中的应用实例

813站长大咖使用的是 GeneratePress 主题,在主题选项中也有摘录长度的选项,对中文的支持也不友好。所以修改其过滤器后解决问题(以下代码中包含了 GeneratePress 主题的样式)。

function zhanzhangb_filter_chinese_excerpt( $output ) {
    global $post;
    //检查其是否为汉字
    $chinese_output = preg_match_all(\"/\\p{Han}+/u\", $post->post_content, $matches);
    if($chinese_output) {
        $output = sprintf( \'%1$s <p class=\"read-more-button-container\"><a class=\"button\" href=\"%2$s\">%3$s</a></p>\',
            mb_substr( $output, 0, 50 ) . \'...\',
            get_permalink(),
            __( \'Read more\', \'generatepress\' )
        );
    }
    return $output;
}
add_filter( \'get_the_excerpt\', \'zhanzhangb_filter_chinese_excerpt\' );

扩展资料:PHP mb_substr 函数

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在!
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。联系邮箱:3496947425@qq.com

813站长大咖 精品文章 解决 WordPress 中文网站的摘录字数统计不准确的问题 https://www.813master.cn/1502.html

WordPress极客一枚!无干货,不分享!

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务