问题描述

心书房主要是为了推荐和分享一些心理学的书籍,同样是采用 WordPress 系统。找了很久的主题也没有特别合适的(大部分收费的主题都是以网上书店为主,加入了电子商务的功能,但对于我目前的需求来说有点浪费,所以花这个钱总觉得不值),无奈只好用官方商城中的免费主题Book-Rev-Lite。
作为一款免费的主题,样式和功能暂且不说,但对于中文的支持很明显是存在问题的(虽然它的菜单都基本汉化了)。
摘要字符 (2).png
发现问题没有,在文章摘要的结尾处出现了�这样一个字符,而且是绝大多数文章存在这样的问题,只有极少数逃过一劫。
用Chrome的开发者工具进行查看,找到该处对应的代码,应该是由bookrev-slider-template.php文件生成的,其中book_rev_lite_get_limited_content函数在functions.php文件中定义(查找的具体方法略过,主要讲下面的)。

// Display limited content

if(!function_exists('book_rev_lite_get_limited_content')) {

    function book_rev_lite_get_limited_content($id, $character_count, $after) {

        $content = get_the_excerpt();

        echo substr( $content, 0, $character_count ) . $after;

    }    

}

处理方法

将代码做如下修改:

if ( ! function_exists( 'book_rev_lite_get_limited_content' ) ) {
    /**
     * Display limited content.
     *
     * @param int    $id                   id of the post.
     * @param int    $character_count      counter.
     * @param string $after             a string that is added to the end of content after it is truncated.
     */
    function book_rev_lite_get_limited_content( $id, $character_count, $after ) {
        $content = get_the_content();//获取文章内容        
        echo wp_trim_words( $content, $character_count, $after);//截取限定字数的内容
    }
}

重新刷新页面,讨厌的字符不见了,当然数量也增加了。

说明

默认情况下,WordPress的文章编辑时,摘要功能是不开启的,而通常做法是截取文章开头的多少字符作为摘要。
原主题中使用get_the_excerpt()函数来获取摘要,而当摘要不存在时就截取文章内容。此函数在英文字符情况下可以正常使用,但在中文系统中则会出现问题(因为在php中是用空格来截取字数的,而我们汉字就杯具了,因为我们汉字是相连的,没有空格来区分,所以在使用中文的时候,截取出来的结果是全文)。
而在bookrev-slider-template.php文件中又yi硬性地规定了截取字数,由于汉字占用两个字符,所以在没办法完整截取时就会出现�。而能够完整截取的就能正常显示。
修改代码中的wp_trim_words() 函数则是专门用来截取限定字数的内容(WordPress 3.3新增的)。

PS:总觉得上面的说明哪里有不对劲,但又说不上来。

参考文章

最后修改:2018 年 09 月 28 日
如果觉得我的文章对你有用,请随意赞赏