非插件实现WordPress主题中文自动截断

目前,Wordpress CMS(杂志)主题盛行,CMS主题有一个共有的特性就是,首页只显示文章部分内容,也就是俗称的文字截断,这个与真正的WP摘要功能无关,只是控制文章字数显示在首页,真正的WP摘要需要主题的支持,两者不能混为一谈.

那么显示文章部分内容有什么好处呢,那就是既可以增加首页的信息量,方便浏览者快速找到想看的内容,又不会把首页拉的很长,整齐美观,还有什么...想起来再说.

实现文字截断的方法很多,比如:在编辑文章时在适当位置加入more标签、安装启用中文工具箱等,特别是一些国外主题会加入特殊的函数实现文字截断,但中文字符与英文字符的算法不同,对中文的截断不是很理想。这里为大家推荐适合中文截断的方法,这些方法已应用在我制作的热点新闻主题中。

文章截断:

  1. <?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 200,"..."); ?>

用上面的代码替换当前主题archive.php、index.php模板文件中类似:

  1. <?php the_content('Read more...'); ?>

  1. <?php the_excerpt(); ?>

其中数字200是字数,可以适当调整,但最好保持为偶数.

文章标题截断:
很多CMS主题是以分类文章列表形式展示的,但当某个文章标题太长,就会造成回行,很不美观,必须要将多余的文字去掉,比较简单也比较笨拙方法是用CSS截断,可惜当文章标题同时有汉字和英文时问题就明显了,经常是一个字只截断了一半,看上去很古怪。还是定义PHP函数实现标题截断比较合理也非常容易。
下面的标题截断函数与文章截断函数同出一辙:

  1. <?php echo mb_strimwidth(get_the_title(), 0, 24, ''); ?>

不过当中文与英文同时存在于标题中时,还是会造成截断不准确,这个问题在文章截断中并不是很明显。

最理想的标题截断方法:

首先将下面的代码添加到主题functions.php模板文件中

  1. //文字截断
  2. function cut_str($src_str,$cut_length)
  3. {
  4. $return_str='';
  5. $i=0;
  6. $n=0;
  7. $str_length=strlen($src_str);
  8. while (($n<$cut_length) && ($i<=$str_length))
  9. {
  10. $tmp_str=substr($src_str,$i,1);
  11. $ascnum=ord($tmp_str);
  12. if ($ascnum>=224)
  13. {
  14. $return_str=$return_str.substr($src_str,$i,3);
  15. $i=$i+3;
  16. $n=$n+2;
  17. }
  18. elseif ($ascnum>=192)
  19. {
  20. $return_str=$return_str.substr($src_str,$i,2);
  21. $i=$i+2;
  22. $n=$n+2;
  23. }
  24. elseif ($ascnum>=65 && $ascnum<=90)
  25. {
  26. $return_str=$return_str.substr($src_str,$i,1);
  27. $i=$i+1;
  28. $n=$n+2;
  29. }
  30. else
  31. {
  32. $return_str=$return_str.substr($src_str,$i,1);
  33. $i=$i+1;
  34. $n=$n+1;
  35. }
  36. }
  37. if ($i<$str_length)
  38. {
  39. $return_str = $return_str . '';
  40. }
  41. if (get_post_status() == 'private')
  42. {
  43. $return_str = $return_str . '(private)';
  44. }
  45. return $return_str;
  46. }

再用下面的代码

  1. <?php echo cut_str($post->post_title,32); ?>

替换主题模板中的

  1. <?php the_title(); ?>

其中:调整数字32可以控制标题的长度.

以上函数代码全部来自网络,原作者未知,有认领者请留言!

本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!

weinxin
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
 
知更鸟
评论  73  访客  62  作者  5
    • Frankyee
      Frankyee 2

      我刚刚开始学习WordPress,正在个人的机子上实验博客,我下载了你的主题,很漂亮,我用的是最新的3.0.1版本,直接安装好像报错,解压后放到主题文件夹后可以正常使用,个人喜欢苹果的这种圆角设计风格,有个小小的建议,就是版主完全可以设计一个图标取代导航条上的苹果图标,不知版主有何看法。本人刚刚入门,对于PHP等虽有热情但却了解甚少,还有什么CSS,希望版主在闲暇之余可以给予一点指教。谢谢!

      • Frankyee
        Frankyee 2

        其它项目都已经正常,就是主页上文章的内容出不来,都是空的,是哪里不对吗

        • 迷笛
          迷笛 3

          中文文章自动截断这个功能不错,以前写文章老是忘记加入more标签,搞得首页拉的很长。收藏了,呵呵

          • steve
            steve 3

            一直使用mb_strimwidth(strip_tags(apply_filters(‘the_content’, $post->post_content)), 0, 300,””); 的方式,有空试试第2种,多谢分享

            • 不是咸鱼
              不是咸鱼 0

              强大,学习了

              • 梦芭莎
                梦芭莎 0

                好文章,顶。

                • 寒风
                  寒风 0

                  发现现在用这款主题的也比较多哦

                  • 小周博客
                    小周博客 2

                    很好很强大

                    • robin
                      robin 5

                      测试1

                      • 三人行
                        三人行 0

                        没有必要

                        • wmtimes
                          wmtimes 7

                          很是需要的功能啊。

                          • 老张博客
                            老张博客 2

                            我也是非插件者。。。。能不要的都不要。

                            • jianfei
                              jianfei 1

                              插件多了类啊

                              • Amos Lee
                                Amos Lee 1

                                apply_filters有时候会把标签一起截断,导致模板显示变形,请问博主遇见过这个问题吗?可知道怎么解决。

                                • 1xue
                                  1xue 0

                                  刚刚试过了,很好用!

                                  • 呵呵
                                    呵呵 1

                                    根据主题来吧,有的不需要用

                                    • 易维营销seo
                                      易维营销seo 5

                                      我一般在发布的时候,在原文里,不会复制很长的内容粘贴到摘要里,一般情况下,这个方法我感觉还是比较管用的哦。

                                      • 泰州seo
                                        泰州seo 2

                                        这个我在其它主题上试过很好用。

                                        • 何苦呢
                                          何苦呢 1

                                          不用插件就可以搞定

                                          • 亿品元素
                                            亿品元素 3

                                            还是用插件简单点

                                            • 优趣
                                              优趣 2

                                              这个我正要用呢,感谢!

                                              • Leo.N
                                                Leo.N 0

                                                有用的代码,收藏之~

                                                • 健宇
                                                  健宇 2

                                                  非常强大…

                                                  • SEMFACE
                                                    SEMFACE 0

                                                    文章很好,站长人品也很好。

                                                    • 凡夫俗子
                                                      凡夫俗子 3

                                                      这个函数不是我写的。

                                                      • 回忆碎片
                                                        回忆碎片 2

                                                        为什么使用这个函数,不能排除密码保护的文章呢?

                                                        • 格只。
                                                          格只。 1

                                                          通常加more就好了呗

                                                          • 小甜瓜
                                                            小甜瓜 2

                                                            刚接触,真的很蒙。哎学习中。

                                                            • Willin Wang
                                                              Willin Wang 1

                                                              这个增加多少次查询了啊- -…

                                                              • 江西SEO
                                                                江西SEO 1

                                                                每次来都有不一样的体验!

                                                                • 网络整合营销
                                                                  网络整合营销 4

                                                                  有这个必要吗?

                                                                  • leeviny
                                                                    leeviny 0

                                                                    临床试验一下。带走了

                                                                    • 贺昌
                                                                      贺昌 1

                                                                      不错,慢慢折腾去

                                                                      • piwu
                                                                        piwu 1

                                                                        学习了 谢谢

                                                                        • 丰胸产品热卖排行榜10强
                                                                          丰胸产品热卖排行榜10强 0

                                                                          不错呀!

                                                                          • 老徐
                                                                            老徐 1

                                                                            能使摘要按照原文样式体现出分段的效果吗

                                                                              • 知更鸟
                                                                                知更鸟

                                                                                @ 老徐 可以手动添加摘要
                                                                                不过需要主题功能支持,比如我的HotNews Pro

                                                                                  • 老徐
                                                                                    老徐 1

                                                                                    @ 知更鸟 本人不想用手动的,用着麻烦。现在一直用着WP-UTF8-Excerpt插件,求能代替这个插件的代码,实现这个插件一样的功能,具体样式,看老徐博客首页。

                                                                                • 佛山SEO
                                                                                  佛山SEO 0

                                                                                  问题解决了,谢谢了

                                                                                  • 小字
                                                                                    小字 0

                                                                                    表示飘过

                                                                                    • 茅檐小博
                                                                                      茅檐小博 1

                                                                                      刚好找到了这篇文章,用了,很好地实现了文章的截断。这个应该还要在分类目录模板进行替换的。

                                                                                      • 淘友
                                                                                        淘友 0

                                                                                        正在找呢.感谢分享.

                                                                                        • 萨龙龙
                                                                                          萨龙龙 4

                                                                                          用第一段代码替换主题的文章截取代码已经完美解决乱码的情况!

                                                                                          • 静候轮回
                                                                                            静候轮回 4

                                                                                            ?php the_title(); ?在哪个文件里啊?index.php中没找到,求解

                                                                                            • 静候轮回
                                                                                              静候轮回 4

                                                                                              这个事首页index.php的所有内容,可以修改吗?谢谢[img]http://p13.freep.cn/p.aspx?u=v20_p13_photo_1302131744122751_0.png[/img]

                                                                                              • itobin
                                                                                                itobin 1

                                                                                                鸟哥您好,我刚进行了博客搬家,从openshift搬到了百度bae,但是出现了摘要尾部乱码,我查看过function.php,里面是有 cut_str函数的,但是仍旧不起作用,不知道是搬家时数据库的问题,还是主题模版的问题,还是wordpress后台的事,请鸟哥帮助分析一下。

                                                                                                  • 知更鸟
                                                                                                    知更鸟

                                                                                                    @ itobin 主机问题,至于空间缺少什么组件,还真忘了…..

                                                                                                      • itobin
                                                                                                        itobin 1

                                                                                                        @ 知更鸟 嗯,我已经确定出事百度bae的主机问题了,因为我重新把网站部署到刚买的wopus主机上,乱码就没有了,但是不知道主机缺少什么东西。百度bae着实令人蛋疼,对于伪静态的支持也不好。索性不用它了。

                                                                                                    • Amos Lee
                                                                                                      Amos Lee 1

                                                                                                      别用插件了,WordPress官方都出这样的功能了,并且还比较智能,具体情况看我写的介绍。http://www.zzmaixun.com/wp_trim_words/

                                                                                                      • 砸核桃分享网
                                                                                                        砸核桃分享网 0

                                                                                                        非常有用,正在折腾主题呢,感谢!!!

                                                                                                        • skyyxujinsong
                                                                                                          skyyxujinsong 1

                                                                                                          前来捧场,东西很有价值。

                                                                                                          • 平平
                                                                                                            平平 1

                                                                                                            鸟哥 你的runcode用的什么插件

                                                                                                            • 两天
                                                                                                              两天 6

                                                                                                              受教了。

                                                                                                            匿名

                                                                                                            发表评论

                                                                                                            匿名网友
                                                                                                            :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

                                                                                                            拖动滑块以完成验证