如何控制 WordPress 文章标题的长度(顺带测试一下超长的标题输出)
Tag: character encoding , iso 8859 , php , utf-8 , wordpress虽然大多数时候我们不需要去管 WordPress 文章标题有多长,因为一般比较长的标题会自动分为两行显示。但是有时候我们为了控制模板的样式整洁,希望文章标题只显示成一行,比如 D&Z Theme Pro CP 主题首页幻灯片右侧的“最新的一篇日志”,这里我首先使用固定长度的摘要来控制文章长度,但是如果有时候文章标题过长而显示成两行的时候,文章摘要就会出现“溢出”。这个时候如果能让标题的长度固定为一行,就能让这里的样式看起来更整洁。在好友 Lee 的帮助下,我解决了这个问题。
其实解决这个问题很简单,只需要一句话就行了。在 WordPress 里,我们使用
<?php the_title(); ?>
来输出文章标题,与其相关的还有一个函数:
<?php get_the_title(); ?>
简单的说说两者的关系,get_the_title() 返回值是一个字符串(文章标题),而 the_title() 就是该字符串通过 echo 输出后的值。
实际上就是 WordPress 自己在输出文章标题时进行了简化,直接用
<?php the_title(); ?>
代替了
<?php echo get_the_title(); ?>
除此之外这里还需要用到另外一个函数:mb_strimwidth(string str, int start, int width, [string trimmarker], [string encoding]);
mb_strimwidth() truncates string str to specified width. It returns truncated string.
If trimmarker is set, trimmarker is appended to return value.
start is start position offset. Number of characters from the beginning of string. (First character is 0)
trimmarker is string that is added to the end of string when string is truncated.
encoding is character encoding. If it is omitted, internal encoding is used.
现在大部分的 PHP 服务器都支持了 MB 库(mbstring 库 全称是 Multi-Byte String 即各种语言都有自己的编码,他们的字节数是不一样的,目前php内部的编码只支持ISO-8859-*, EUC-JP, UTF-8 其他的编码的语言是没办法在 php 程序上正确显示的。解决的方法就是通过 php 的 mbstring 函数库来解决),所以我们可以放心的使用这个用于控制字符串长度的函数:
<?php echo mb_strimwidth(get_the_title(), 0, 38, '...'); ?>
那么我们只需要用上面这个函数替换 WordPress 原有的
<?php the_title(); ?>
即可,这里我输出了字符串的第0位到第38位,根据主题的不同可以自行设置该数值,另外多余长度部分使用“…”代替。
其实我在控制文章摘要的时候也是使用的这个函数,比如我在 D&Z Theme Pro CP 主题的首页里使用的就是
<?php echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 470,"......"); ?>
来输出470个字符长度的摘要,并过滤了 HTML 标记。
虽然这是个很简单的方法,但我相信它对主题制作者而言还是相当实用的
zEUS.

http://codex.wordpress.org/Function_Reference/wp_trim_excerpt
一般情况下用不到这么长的标题,哈哈……
有时候 CMS 主题需要这种方法
不错,学习了,不过,如果作者能在写的时候,就精简下标题,会更好。
……我需不需要?问题是我还是不会~~~
基本上需要… 照着步骤做吧,其实很简单的…
实用,知识下!
非常好,最近正好遇到了标题超长导致显示不正常的问题,非常感谢!
呵呵,不客气
实用!很久没看兄弟的技术型文章了,激动
如果题目中有英文或者符号,会不会被截断?
它不考虑字符串里是中文还是英文还是符号,全部都可以截断
Z兄的技术贴写得都很通俗易懂。
呵呵,我觉得我比较啰嗦,想极力说得更明白
一般超长,我用overflow:hidden;哈哈~
摘要截断输出用mb_strimwidth很不错,已经用到主题上了,自我升级,谢谢老大
overflow:hidden 会把文字掐断,不是太美观,不过我以前也是用这个,呵呵
学习了,很强大