小荷塘 發表於 2023-8-29 00:00:00

为WordPress添加文章字数统计的方法

<p>
WordPress在后台编辑日志时编辑框左下角有一个字数统计,不过只显示在后台,能不能在前台也加上文章字数统计功能呢?研究了一下程序源文件,发现中文版WP后台的字数统计功能,是通过wp-content\languages目录的zh_CN-word-count.js实现的,就是不知道如何调用。网上搜了一下,找到两篇老外给出的代码:</p>
<p>
一、把下面代码加到主题的functions.php文件中:</p>
<blockquote>
<ol>
<li>
<span><span>functioncount_words($str){ </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span>$words= 0; </span>
</li>
<li>
<span> </span>
</li>
<li>
<span>$str=eregi_replace(<span>" +"</span><span>,</span><span>" "</span><span>,$str); </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span>$array=explode(<span>" "</span><span>,$str); </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span><span>for</span><span>($i=0;$i </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span>{ </span>
</li>
<li>
<span> </span>
</li>
<li>
<span><span>if</span><span>(eregi(</span><span>""</span><span>,$array[$i])) </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span>$words++; </span>
</li>
<li>
<span> </span>
</li>
<li>
<span>} </span>
</li>
<li>
<span> </span>
</li>
<li>
<span><span>return</span><span>$words; </span></span>
</li>
<li>
<span> </span>
</li>
<li>
<span>} </span>
</li>
</ol>
</blockquote>
<p>
然后在single.php中希望显示字数统计的位置加上:</p>
<blockquote>
<ol>
<li>
<span><span>Word count: &lt;?php echo count_words($post-&gt;post_content); ?&gt; </span></span>
</li>
</ol>
</blockquote>
<p>
原文</p>
<p>
二、还是将下面代码加到functions.php文件中,此方法与上面不同的是,还加上了一个估算的阅读时间:</p>
<blockquote>
<ol>
<li>
<span><span>// Custom functions</span><span> </span></span>
</li>
<li>
<span><span>// START : Show word count</span><span> </span></span>
</li>
<li>
<span><span>function</span><span> show_post_word_count(){ </span></span>
</li>
<li>
<span>ob_start(); </span>
</li>
<li>
<span>the_content(); </span>
</li>
<li>
<span>$content = ob_get_clean(); </span>
</li>
<li>
<span><span>return</span><span> sizeof(explode(</span><span>" "</span><span>, $content)); </span></span>
</li>
<li>
<span>} </span>
</li>
<li>
<span><span>// END : Show word count</span><span> </span></span>
</li>
<li>
<span><span>// START : Estimated reading time</span><span> </span></span>
</li>
<li>
<span><span>if</span><span> (!function_exists(</span><span>'est_read_time'</span><span>)): </span></span>
</li>
<li>
<span><span>function</span><span> est_read_time( $</span><span>return</span><span> = </span><span>false</span><span>) { </span></span>
</li>
<li>
<span>$wordcount = round(str_word_count(get_the_content()), -2); </span>
</li>
<li>
<span>$minutes_fast = ceil($wordcount / 250); </span>
</li>
<li>
<span>$minutes_slow = ceil($wordcount / 150); </span>
</li>
<li>
<span><span>if</span><span> ($wordcount &lt;= 150) { </span></span>
</li>
<li>
<span>$output = __(<span>"&lt; 1 minute"</span><span>); </span></span>
</li>
<li>
<span>} <span>else</span><span> { </span></span>
</li>
<li>
<span>$output = sprintf(__(<span>"%s - %s minutes"</span><span>), $minutes_fast, $minutes_slow); </span></span>
</li>
<li>
<span>} </span>
</li>
<li>
<span>echo $output; </span>
</li>
<li>
<span>} </span>
</li>
<li>
<span>endif; </span>
</li>
<li>
<span><span>if</span><span> (!function_exists(</span><span>'est_the_content'</span><span>)): </span></span>
</li>
<li>
<span><span>function</span><span> est_the_content( $orig ) { </span></span>
</li>
<li>
<span><span>// Prepend the reading time to the post content</span><span> </span></span>
</li>
<li>
<span><span>return</span><span> est_read_time(</span><span>true</span><span>) . </span><span>"\n\n"</span><span> . $orig; </span></span>
</li>
<li>
<span>} </span>
</li>
<li>
<span>endif; </span>
</li>
<li>
<span><span>// END : Estimated reading time</span><span> </span></span>
</li>
</ol>
</blockquote>
<p>
同样在single.php中希望显示字数统计的位置加上:</p>
<blockquote>
<ol>
<li>
<span><span>The following &lt;?php echo show_post_word_count(); ?&gt; words should take about &lt;?php echo est_read_time(); ?&gt; to read. </span></span>
</li>
</ol>
</blockquote>
<p>
可惜上述两种方法对汉字统计无效,只适合纯英文站点,网上也没发现与中文博客字数统计相关的文章,没办法还是自己折腾一个吧。</p>
<p>
<strong>WordPress中文博客文章字数统计代码</strong></p>
<p>
添加方法与上述相同,首先把下面代码加到functions.php文件中。( 注:HotNews主题加到“//全部结束”前面 )</p>
<blockquote>
<ol>
<li>
<span><span>//字数统计</span><span> </span></span>
</li>
<li>
<span><span>function</span><span> count_words ($text) { </span></span>
</li>
<li>
<span>global $post; </span>
</li>
<li>
<span><span>if</span><span> ( </span><span>''</span><span> == $text ) { </span></span>
</li>
<li>
<span>$text = $post-&gt;post_content; </span>
</li>
<li>
<span><span>if</span><span> (mb_strlen($output, </span><span>'UTF-8'</span><span>) &lt; mb_strlen($text, </span><span>'UTF-8'</span><span>)) $output .= </span><span>'本文共'</span><span> . mb_strlen(preg_replace(</span><span>'/\s/'</span><span>,</span><span>''</span><span>,html_entity_decode(strip_tags($post-&gt;post_content))),</span><span>'UTF-8'</span><span>) . </span><span>'个字'</span><span>; </span></span>
</li>
<li>
<span><span>return</span><span> $output; </span></span>
</li>
<li>
<span>} </span>
</li>
<li>
<span>} </span>
</li>
</ol>
</blockquote>
<p>
再把调用统计代码加到自己认为适合的位置。</p>
<p>
经测试对中文统计没有什么问题,英文统计的是字母。</p>
<blockquote>
<ol>
<li>
<span><span>&lt;?php echo count_words ($text); ?&gt; </span></span>
</li>
</ol>
</blockquote>
<p>
效果看这篇文章标题下面信息栏</p>
頁: [1]
查看完整版本: 为WordPress添加文章字数统计的方法