现在的位置: 首页Wordpress>正文
非插件实现WordPress主题中文自动截断
2010年09月07日 Wordpress ⁄ 作者:知更鸟 ⁄ 共 1664字 评论数 57 ⁄ 被围观 72,900+

目前,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可以控制标题的长度.

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

目前有 57 条留言 其中:访客:48 条, 博主:4 条 引用: 5

  1. Frankyee : 2010年09月07日 623 天前 17:19:36  1楼 @回复 回复

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

  2. Frankyee : 2010年09月07日 623 天前 17:46:12  2楼 @回复 回复

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

  3. 迷笛 : 2010年09月07日 623 天前 19:14:54  3楼 @回复 回复

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

  4. steve : 2010年09月07日 623 天前 21:54:58  4楼 @回复 回复

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

  5. 不是咸鱼 : 2010年09月07日 623 天前 23:57:01  5楼 @回复 回复

    强大,学习了

  6. 梦芭莎 : 2010年09月08日 623 天前 11:55:44  6楼 @回复 回复

    好文章,顶。

  7. 寒风 : 2010年09月08日 623 天前 11:59:01  7楼 @回复 回复

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

  8. 小周博客 : 2010年09月12日 619 天前 14:11:28  8楼 @回复 回复

    很好很强大

  9. robin : 2010年09月12日 618 天前 21:16:53  9楼 @回复 回复

    测试1

  10. 三人行 : 2010年09月13日 617 天前 23:55:35  10楼 @回复 回复

    没有必要

  11. wmtimes : 2010年09月15日 616 天前 03:09:08  11楼 @回复 回复

    很是需要的功能啊。

  12. 老张博客 : 2010年09月15日 616 天前 08:57:21  12楼 @回复 回复

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

  13. jianfei : 2010年09月15日 616 天前 12:44:02  13楼 @回复 回复

    插件多了类啊

  14. Amos Lee : 2010年09月16日 615 天前 07:39:32  14楼 @回复 回复

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

  15. 1xue : 2010年09月29日 601 天前 17:43:27  15楼 @回复 回复

    刚刚试过了,很好用!

  16. 呵呵 : 2010年10月19日 581 天前 18:35:30  16楼 @回复 回复

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

  17. 易维营销seo : 2010年12月04日 536 天前 08:43:02  17楼 @回复 回复

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

  18. 泰州seo : 2010年12月04日 535 天前 16:47:03  18楼 @回复 回复

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

  19. 何苦呢 : 2010年12月12日 528 天前 12:27:34  19楼 @回复 回复

    不用插件就可以搞定

  20. 亿品元素 : 2010年12月16日 523 天前 21:02:51  20楼 @回复 回复

    还是用插件简单点

  21. 优趣 : 2010年12月18日 521 天前 19:01:10  21楼 @回复 回复

    这个我正要用呢,感谢!

  22. Leo.N : 2011年01月11日 497 天前 23:03:37  22楼 @回复 回复

    有用的代码,收藏之~

  23. 健宇 : 2011年01月23日 486 天前 12:16:53  23楼 @回复 回复

    非常强大...

  24. SEMFACE : 2011年02月07日 471 天前 10:30:12  24楼 @回复 回复

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

  25. 凡夫俗子 : 2011年02月25日 453 天前 12:16:46  25楼 @回复 回复

    这个函数不是我写的。

  26. 回忆碎片 : 2011年03月14日 436 天前 12:54:23  26楼 @回复 回复

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

    • 知更鸟 : 2011年03月14日 435 天前 16:27:11 @回复 回复

      我作的主题可以不显示密码的内容

      • 回忆碎片 : 2011年03月14日 435 天前 17:20:15 @回复 回复

        那怎么能在别人做的主题下,也能不显示密码的内容?

  27. 格只。 : 2011年04月11日 407 天前 16:45:10  27楼 @回复 回复

    通常加more就好了呗

  28. 小甜瓜 : 2011年04月14日 404 天前 22:00:20  28楼 @回复 回复

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

  29. Willin Wang : 2011年05月01日 388 天前 09:23:53  29楼 @回复 回复

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

  30. 江西SEO : 2011年05月16日 373 天前 10:30:18  30楼 @回复 回复

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

  31. 网络整合营销 : 2011年05月27日 362 天前 12:15:50  31楼 @回复 回复

    有这个必要吗?

  32. leeviny : 2011年05月31日 358 天前 04:50:52  32楼 @回复 回复

    临床试验一下。带走了

  33. 贺昌 : 2011年06月12日 346 天前 10:37:53  33楼 @回复 回复

    不错,慢慢折腾去

  34. piwu : 2011年07月07日 321 天前 10:40:16  34楼 @回复 回复

    学习了 谢谢

  35. 丰胸产品热卖排行榜10强 : 2011年09月22日 243 天前 23:31:17  35楼 @回复 回复

    不错呀!

  36. 老徐 : 2012年01月01日 143 天前 07:01:35  36楼 @回复 回复

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

    • 知更鸟 : 2012年01月01日 143 天前 10:07:59 @回复 回复

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

      • 老徐 : 2012年01月01日 143 天前 10:10:46 @回复 回复

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

  37. 佛山SEO : 2012年04月16日 37 天前 10:07:45  37楼 @回复 回复

    问题解决了,谢谢了

  38. 小字 : 2012年04月27日 26 天前 01:19:14  38楼 @回复 回复

    表示飘过

查看来自外部的引用: 5

  • 哇喔,荣鹏的个人主页 » 非插件实现WordPress主题中文自动截断
  • 非插件实现WordPress主题中文自动截断 | 翱翔beta
  • 更新:彻底解决摘要问题 | 光速捏猫爪♪
  • Wordpress无插件中文标题和正文自动截断
  • 【解决】国外主题不显示中文摘要 | Eiby Shen

Wopus问答

给我留言

留言无头像?

留言不能超过1500字,已输入字数:

×
腾讯微博