解决Simple Blog Stats插件字数统计错误的问题

本文共有541个字,阅读需要3分钟。

自从解决了每篇文章字数统计的问题之后,老郭就想着有没有什么办法可以统计整个博客的字数。网上推荐的比较多的是使用Simple Blog Stats插件,很轻巧但是统计功能很强大,于是老郭就按照了一个。但是安装好了之后问题出现了,按照这个插件的统计,老郭博客一共只有16000多个字,这显然是不正确的,老郭已经发了120多篇文章了,如果按照这个数字,那平均每篇文章才100多个字。

图片[1]-解决Simple Blog Stats插件字数统计错误的问题

但是关于这个插件字数统计错误的问题,网上似乎很少有人提到,更不要说解决的办法了,老郭只能自己摸索了。老郭在插件文件编辑器中打开Simple Blog Stats插件的simple-blog-stats.php文件,在大概第809行的位置找到了有关整个博客字数统计的注释:// number of words all post。然后在注释下面第851行和第871行的位置发现了问题,这里使用的函数是str_word_count($content, 0),而str_word_count函数是用来统计单词数量的,用这个函数来统计中文字数,那出现差错也就是在所难免的了。

图片[2]-解决Simple Blog Stats插件字数统计错误的问题

于是老郭对851行和871行进行了修改,将str_word_count函数换成了mb_strlen函数。

$count += mb_strlen(preg_replace('/s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8')
function sbs_word_count_all($wrap) {
    
    $disable = apply_filters('sbs_word_count_all_disable', false);
    
    if ($disable) return;
    
    global $sbs_options;
    
    $cache = isset($sbs_options['sbs_enable_cache']) ? $sbs_options['sbs_enable_cache'] : false;
    
    $limit = apply_filters('sbs_get_posts_limit', -1);
    
    $post_type = apply_filters('sbs_word_count_all_post_type', 'any');
    
    $args = array(
        'post_type'      => $post_type, 
        'post_status'    => 'publish', 
        'posts_per_page' => $limit,
        'fields'         => 'ids',
    );
    
    $posts = get_posts($args);
    
    if (!$posts) return;
    
    if ($cache) {
        
        if (false === ($count = get_transient('sbs_word_count'))) {
            
            $count = 0;
            
            foreach ($posts as $id) {
                
                $post = get_post($id);
                
                $content = isset($post->post_content) ? $post->post_content : null;
                
                // 去除短代码 361 和 HTML 标签
                $content = preg_replace('/(\361)/', '', $content);
                
                // 去除代码块(匹配 <code> 和 <pre> 标签,以及 Markdown 代码块)
                $content = preg_replace('/<pre.*?>.*?<\/pre>|<code.*?>.*?<\/code>|```.*?```/is', '', $content);

                $content = strip_tags($content); // 去除 HTML 标签
                
                // 统计汉字字符数
                $chinese_count = mb_strlen(preg_replace('/[^\x{4e00}-\x{9fa5}]/u', '', $content), 'UTF-8');
                
                // 统计英文单词数及标点符号
                preg_match_all('/[a-zA-Z0-9]+|[[:punct:]]/u', $content, $matches);
                $english_count = count($matches[0]);
                
                $count += $chinese_count + $english_count;
            }
            
            set_transient('sbs_word_count', number_format(floatval($count)), 12 * HOUR_IN_SECONDS);
            
        }
        
    } else {
        
        $count = 0;
        
        foreach ($posts as $id) {
            
            $post = get_post($id);
            
            $content = isset($post->post_content) ? $post->post_content : null;
            
            // 去除短代码 361 和 HTML 标签
            $content = preg_replace('/(\361)/', '', $content);
            
            // 去除代码块(匹配 <code> 和 <pre> 标签,以及 Markdown 代码块)
            $content = preg_replace('/<pre.*?>.*?<\/pre>|<code.*?>.*?<\/code>|```.*?```/is', '', $content);

            $content = strip_tags($content); // 去除 HTML 标签
            
            // 统计汉字字符数
            $chinese_count = mb_strlen(preg_replace('/[^\x{4e00}-\x{9fa5}]/u', '', $content), 'UTF-8');
            
            // 统计英文单词数及标点符号
            preg_match_all('/[a-zA-Z0-9]+|[[:punct:]]/u', $content, $matches);
            $english_count = count($matches[0]);
            
            $count += $chinese_count + $english_count;
        }
        
    }
    
    wp_reset_postdata();
    
    $count = is_int($count) ? $count : 0;
    
    $output = number_format($count);
    
    $output = ($wrap) ? $sbs_options['count_words_all_before'] . $output . $sbs_options['count_words_all_after'] : $output;
    
    return $output;
    
}
add_shortcode('sbs_word_count_all', 'sbs_word_count_all');

重新刷新博客后台,老郭发现字数统计已经变成正确的了,问题得到了解决。

图片[3]-解决Simple Blog Stats插件字数统计错误的问题
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

    暂无评论内容