我刚接触Wordpress的时候——大约在今年3月份或者更早吧——除了Wordpress自带的插件,最先装的插件应该就是桑葚的中文WordPress工具箱
了。(一个小发现,我用紫光V5打出来的是“桑椹”,而他的网站上写出来的是“桑葚”,在金山词霸查了一下,好像紫光打出来的是正确的,桑椹——英文mulberry...汗了)
这个插件提供了很多功能,都是一些国人喜欢的功能——最新文章,最新评论,评论数最多的文章,发表评论最多的网友,随机文章以及适合中文环境的摘要功能。这些功能我感觉并不实用,虽然国内的大多BSP都提供这些功能。最新文章功能Wordpress自带,最新评论功能倒还有点用,随机文章功能对于专门讨论某个方面的Blog还行,而我一直的观点是一个Blog对应一个人,个人的所有文章应该发在同一个Blog上,文章的分类应该靠Blog系统的分类功能解决,而非建立多个Blog。我的研究方向比较多,所以我的Blog分类很广,这样的情况下,一个设计的比较好的相关文章功能可能比随机文章好的多。
最近一直困扰于百度的收录问题。我的策略是:存档页、分类页、tag页、搜索页都不应该被搜索引擎收录,因为搜索引擎会进行重复页面检测。(桑葚的网站好像没有做这方面的设置,经常在Google里搜到他的tag页)对于Google,可以在所有要禁止收录的页面设置meta标签robots为"noindex,follow",这样Google就会只访问这些页面而不收录,既禁止了收录,又可以让Google顺着这些页面查找独立文章页面。不过,同样的办法对百度就行不通,因为百度不支持meta标签robots,所以只好用robots.txt文件。分类页和tag页分别在category和tag目录下,只要禁止这两个目录就可以了,而存档页却是类似"http://yskin.net/2006/07/"这样的结构,禁了这些目录,下面的独立文章页面也会被一起禁掉,百度又只支持Disallow,不支持Allow。
解决的办法嘛,狠一点的话就在存档页中检测来访的是不是百度,如果是就直接输出个404。我想的权宜之计是:由于存档页显示的是文章的摘要,想办法让摘要更短一些,这样可能就检测不出来重复了。我弟弟的Blog用了中文WordPress工具箱,他那儿显示的摘要就很短,所以跑去下了这个插件,研究一下Wordpress的摘要算法。
研究的结果是这样:在中文WordPress工具箱的说明里有提到:
某些情况下需要输出摘要,比如搜索结果、档案,还有 rss 输出,这样可以节省流量资源。但是,如果你的文章是中文的话,官方 WordPress 输出的其实并不是摘要,它只是把文章里的 html 代码过滤掉了,但所有文字都还是原样输出了。
激活这个插件后,输出的就是真正截断的摘要了。
(顺便提一下,rss输出还是不要用摘要方式的好,人家订阅了你的rss不是为了看个摘要的,节约流量可以用feedburner烧录一下嘛。当然,由于网站放置了广告而希望用户访问页面的除外,够狠的话也可以把广告加到rss里)
桑葚的这段话是有错误地。Wordpress输出摘要时,先将文章里的html代码过滤掉了,然后对文章进行了摘要并输出,并没有因为你写的是中文就不摘要了。不过,摘要算法只考虑了英文以及其他西方语言,因为这些语言用空格做单词的分隔符,所以就用空格做区分,截取前55个单词。但是这个算法对中文日文这些不用空格分隔单词的语言就不合适了,中文文章里很难找到一个空格,摘要算法要找够55个空格才截断,所以最终只会输出整篇文章。
Wordpress通过the_excerpt()函数输出摘要(rss里通过the_excerpt_rss()函数输出摘要),这个函数中只有一行代码:echo apply_filters('the_excerpt', get_the_excerpt());就是说对get_the_excerpt()函数返回的字符串执行转换器操作并输出。the_excerpt有转换字符、转换表情、加<p>标签等几个默认转换器。get_the_excerpt()函数中检验了一下文章是否有密码,然后将用户自定的文章摘要传给wp_trim_excerpt()函数。wp_trim_excerpt()函数收到用户自定的文章摘要则直接返回,否则根据文章内容生成摘要。他先把文章过一遍文章内容的转换器,再用strip_tags()函数去掉所有html和PHP标签,再用explode()函数以一个空格做分隔符,把文章分成最多56段。如果不够56段则原样输出,否则就把最后一段替换成"[...]",用implode()函数以空格做分隔符重新组装起来。很明显,这个方法对英文文章很有效,而对不用空格做单词间分隔符的中文则没什么作用。很少有中文文章包含55个空格,所以给大家以中文文章摘要无效的印象。(好像代码里没有对<!--more-->标签进行处理,所以这个标签只在主页有效。)
桑葚的插件里使用了一个mul_excerpt()函数,加做the_excerpt和the_excerpt_rss的转换器。这个方法并不好,the_excerpt有转换字符、转换表情、加<p>标签等几个默认转换器,插件添加转换器的时候又没有设置等级,导致摘要被加上<p>标签才被substr,造成HTML错误。其实完全可以把这个函数加做get_the_excerpt的转换器,因为the_excerpt和the_excerpt_rss最终都是要调用get_the_excerpt得到摘要的。另外,桑葚用substr($excerpt,0,255)将文章截取256个字节,由于采用UTF-8编码的中文字符占据两个字节,可能会造成最后有半个中文字符存在的现象。所以他用了一个utf8_trim()函数,对摘要的最后进行处理。这个插件名叫中文WordPress工具箱,插件说明里也写道了:“用来解决官方 WordPress 没有照顾到的中文相关问题。”对于文章摘要也写道了:“真正的文章摘要,真正截断,没有乱码。”插件针对各种中文相关问题的解决办法就是这个utf8_trim()函数。如果是在侧边栏显示的最新留言,使用这个办法,再配上等宽字体——每个英文字符相同宽度,并且等于中文字符宽度的一半,那么显示出来的一点非常整齐,非常好看。不过对于文章摘要来说,用这个函数就不必了吧,mb_substr()函数不是很好用么。
Update:有点小错误,GB2312里一个中文占两个字节,但是UTF-8里中文通常占3个字节。如果是GB2312编码的字符串,截取固定的几个字节,再配上等宽字体,可以保证最终显示的很整齐。但是UTF-8编码就不行了。
我写了一个小插件,用了一个新的摘要截断算法。由于wp_trim_excerpt()函数接收到非空字符串就直接返回,所以我把这个函数设置为get_the_excerpt的转换器,并设置了一个更高的优先级,使他能够在wp_trim_excerpt()函数之前被执行。直接copy了wp_trim_excerpt的前面几步,然后设置了两个变量fragmentnum和wordnum,为摘要的最大段落数和字符数。我觉得应该以段落为单位来做摘要,段落不被截断就不会被断章取义了。在摘要的最后添加了一个阅读全文的链接,就象大多数BSP系统那样。另外也加了全文字数,看起来和其他BSP很象了吧
Update:应super37的要求——要我的这个wp-CJK-excerpt插件和桑葚的中文Wordpress工具箱能够一起使用,因为中文Wordpress工具箱还有其他功能嘛。找到了Wordpress提供的remove_filter()函数。想直接写在插件主体里,但是不知道Wordpress读取插件的顺序是怎么样的,如果是按照插件安装的顺序,那么只有我的插件后安装才能保证屏蔽。想来想去,反正如果执行the_excerpt()函数的话,我的插件先执行,干脆放在函数里了。应人之邀做的修改,桑葚你不要怪我...
Update2:好像有很多人的服务器不支持mb_strlen()函数,安装了这个插件后分类页会执行出错,提示Fatal error: Call to undefined function: mb_strlen()。如果打开了feed里显示摘要,那么feed也会出错。
一般商业PHP空间,Multibyte String函数库都应该是安装过的,否则程序怎么处理UTF-8编码的字符串啊。老实说,如果空间连这个函数库都没的话,你真的应该好好考虑下这个空间的质量了。我加了个检测,如果mb_strlen()函数不能用的话在后台管理页面上方显示一个警告框,提醒用户插件不能使用,请用户禁用插件。而且里面加了个return语句,检测到函数不能用就直接返回,不会再执行下面的操作,以免因该函数不能用而导致页面执行出错。这个警告框的代码抄自akismet插件。
Update3:又想了点办法,在没有mb_strlen()函数的环境下自定义一个。我写的这个mb_strlen()函数很简单,只处理UTF-8编码的字符串。这段代码用正则表达式检测一个UTF-8编码字符串的长度,灵感来自这里。因为用的是正则表达式,好像对执行时间有所影响。一个10篇文章的页面,执行时间要增加大约0.5秒。所以如果您的空间上mb_strlen()函数不能用的话,请自行斟酌是否用这个插件。
另外,给显示“阅读全文”等字的那部分增加了一个叫readmore的class,因为我用的True Blue style定义了这个class。您也可以在自己的CSS文件里加入一些代码来控制这部分的显示。
激活就可以?
嗯,激活就可以了。效果嘛,随便打开我的一个存档页或分类页就可以看到,小文章直接显示全文,大段文章则截取前面几段并在最后显示“阅读全文——共××字”
昨天盯着这篇文章看了半天,感觉记不得这篇文章了。不过发在Blog上,应该是我写的没错。汗了,写了一个星期就记不得了,老了老了。看来我开这个Blog,每天把学到的东西记录下来,还是非常英明地!
寒啊,我也有过这样的情况,看到某文章,觉得这小子和我的观点很一致嘛,再一看,好像就是我写的…
下载了。谢谢!
首页为什么还是全部显示啊,和THEME有关吗?
WordPress就是这样设计的,首页用more标签来截断,存档页(包括分类页和按时间分类页)是使用函数截断并去除html格式。
怎么我激活后没有任何变化啊?我是个新手,汗:)
激活后,查看一下http://yskin.net/2006/08/这样的页面就可以看到效果了。
你的这个摘要插件到底要怎么用?我装上激活后一点反应都没有,是不是还要另外设置一下?能否给个详细的使用说明?
我使用後了,連內文也變成摘要而已@@
http://blog.mlchen.com/,用的K2模版,和我用的模版一样,不应该出问题才是。
不好意思,的確能 work 了!但是只限於在 archivs 模式出現。
那我想請教如何修改主頁面呢?因為首頁文章如此長實在試看的有點難受
不好意思,剛搬來 wordpress 有些地方都需要人家的幫助,感謝您。
唔,WordPress就是这样设计的。blog主页显示完整文章,archives页则调用the_excerpt()函数显示摘要。archives页的用处就是用来查找文章的,只提供个文章标题和前55个单词的去掉所有html标签的摘要。blog主页显示的是完整的文章,但为了解决由于有文章太长撑大页面的问题,也提供了两种途径显示摘要:一个是在编辑页面下方的“可选摘要”框里填上要显示的摘要内容;一个是用<!--more-->标签来分隔文章,主页上将只显示该标签前面的内容,再跟一个"read more..."字样链接至文章的独立页。
so,虽然其他的blog系统经常有在主页上显示摘要的选项,但是WordPress就是不支持在主页显示自动截取的摘要的功能,也没有人去做该功能的插件。老实说,一般人也写不了很长的文章吧,高人如keso,一篇文章也写不了多少字,也没有打开主页显示摘要。我倒是经常见到有些喜欢收集文章的"blog",总是喜欢开着主页显示摘要,因为收集的文章动辄上万字,长呀。如果你实在觉得主页显示10篇文章的全文导致页面太长不好看,那么,要么手工加more标签(在可视化编辑器里可以直接点上方的按钮添加),要么使用一些在主页只显示一篇文章的模版吧。如果是为了广告,那么,弄个主页显示10个字的摘要,甚至只在主页显示几个文章标题,真的把主页(index)做成index索引页,再把每篇文章里都分成好几个页面,这样应该可以了吧
感謝您的指導.. :p
可不可以显示图片啊??
没有任何变化,汗
改了模板,现在可以了
我的激活了
没有反应啊~~
blog.waihou..com]
这是首页,帮忙看下啊
呵呵 不错!
你好,你的这个插件很好。但是如果我登陆后,点进某篇文章,页面会显示:
您现在以 氧气层 的身份登录。注销 »
如果我点注销,则会出现下列错误。
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-login.php on line 9
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-includes\pluggable-functions.php on line 319
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-includes\pluggable-functions.php on line 320
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-includes\pluggable-functions.php on line 321
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-includes\pluggable-functions.php on line 322
Warning: Cannot modify header information - headers already sent by (output started at D:\wwwroot\yangqiceng\wwwroot\wp-content\plugins\wp-CJK-excerpt.php:1) in D:\wwwroot\yangqiceng\wwwroot\wp-includes\pluggable-functions.php on line 266
请指教。
刚才发现原来从哪注销都会出现这个错误。。。。
求救。。。
凡是":1"的,基本上都是因为UTF-8的BOM头引起的。我又查了一下,我给出的插件是不包含BOM的。你是不是修改过插件的原文件,导致写入的BOM头?
我也不知道哦,给偶一个解决方法咯/登陆都登陆不了呢
搞定了,谢谢。
我记起来了,当初我把阅读全文添加了两个字,即:点此阅读全文
然后改成-self了,不是-blank。
可能是这个原因了。
那不能改么?
当WordPress因为某个插件出错而无法进入后台时,标准的解决方法是:ftp上去,删除出错的插件的文件。
插件当然能改,只是,PHP对UTF-8的BOM不支持,所以不能用Windows自带的记事本修改任何PHP文件。(具体请参考《Wordpress中要注意的UTF-8的BOM问题》)事实上,搞编程的人,都需要一个称手的文本编辑器,比如EditPlus,UltraEdit之类的。
_blank换成_self,“阅读全文”前面加上“点此”二字。帮你改好了,email一份,网站上放一份:http://yskin.net/t/temp.rar
1.3是9月份更新的插件,唔,这个插件该更新了。
您好,
你的插件很好,
可是我激活后一点反应也没有,也无法调用,
不知道楼上几位都是怎么解决这个问题的?
我的用是2.0.5中文版本默认模版
好东西,真不错
yskin,你好。你的这个插件和wordpress中文工具箱,我装了都不起作用.不知道是什么原因,请教.谢谢
作用在Archive页面,比如http://yskin.net/2007/01/这样的页面,而不会作用于Blog主页。WordPress就是这么设计地,各个WP模版也都是这么设计地,因为老外根本没想到中国人那么喜欢在首页放很少的文字,再吸引人点进页面以增加访问量。而且,老外写Blog都是自己写,一般一篇文章只有很少一点字,哪会想到中国人Ctrl C, Ctrl V可以瞬间弄出那么多文字。
yskin,你好,请教个问题:我在后台编辑文章时,要输入php语言类的语句,可是不知道为什么,查看网页时却看不到php语句.为什么呢?比如要输入,可是却不显示它,我加了引号等,就只有显示引号等.就是不显示语句.为什么?
因为你要遵守html标准,把所有小于号替换成
<,还有&符号要替换成&。能不能把这个插件修改一下,使它能支持首页摘要显示啊!
能不能给一个用.zip或者.tar.gz格式的下载啊?我的机器用Linux,打不开.rar啊(rar是收费软件)。。。
能不能做个显示分类文章的插件?
WP2.1会自动在中间加个标签
Yskin你好。
你的插件十分有效,但是我还有一些问题。
我想在feed中输出全文,在后台设为全文,却还是摘要。
另一方面,我也必须使用摘要功能,因为我有一个Timeline的插件,需要输出所有文章的摘要,见 http://blt-fqx.weedns.com/timeline/ (IE支持不佳)如果在这里输出全文就太大了。
如何解决这个矛盾呢?
PS:UltraEdit打开UTF-8的中文总是乱码,请问是版本过低吗?
This jessica alba porn is, she giggled a long strip of the same. She.
yskin,我想减少复制内容,所以我装了你这个插件,但不起作用,是不是还要装桑椹那个插件?谢谢。
使用了您的插件,我只想说,太,太牛屄了!
正式推举您是WordPress中文区CEO,行么?
中文截断是国人最大问题,您的技术是最酷的。
顺便说一句,首页截断也没问题。各位,达人,Yskin的技术太牛屄了,都不会
解答你们的小小请求了,呵呵,玩笑。
只要在您所用的Theme的Index.Php中把 the_content() 替换为 the_excerpt()
就OK了,其它的都将被Yskin的牛屄代码无情的化解。
Freedom ! 我为Yskin 欢呼!
不会吧,回复留言后,屏幕平滑地移动到我的留言处,太酷了,能请教Yskin是如何
实现的么?真受不了。怎么能牛屄到这种程度,我无话可说。
Yskin你好。
你的插件十分有效,但是我也遇到了36楼的问题——我想在feed中输出全文,在后台设为全文,却还是摘要。
非常好,一试成功,正是我想要的效果,谢谢!
这个插件
一定要安装这个才可以
yum install php-mbstring
偶然,我早就希望用这么个插件,现在才发现,看来我太懒了,谢谢!
今天长见识了,原来还有这些
很好,很喜欢
谢谢,找这个插件找了很久了。
怎样才能让wp-CJK-excerpt与coolcode或runcode插件很好的共存呢,博主应该能明白我说的意思吧
再问36楼和41楼问题:使用此插件后,可否/如何让RSS仍输出全文(最好是带格式的全文)?我注意到,yskin也是赞同输出全文的,但此处的feed也是输出的摘要。
为你的开发及分享工作致谢。
呃,这个插件只影响存档页面,也就是包括按月存档、分类存档、tag存档等页面。feed不属于存档页面。
另外,这个插件影响的是摘要的生成算法。也就是说,如果你的模板里写到,在首页显示全文,而在存档页显示摘要,那么,在存档页面,当WordPress准备输出摘要的时候,不再使用自带的生成摘要的算法。所以,输出摘要还是全文是模板决定的,这个插件并不改变模板的行为。
突然想起来,Firefox2刚出来时候的一个很知名的问题,可能楼上说的就是该问题:Firefox2开始,显示RSS/Atom的时候,Firefox会自动显示摘要,而不是全文。WordPress输出feed的时候,如果选择输出摘要,那么只输出文章的摘要部分,这样RSS阅读器无从选择,只能显示摘要;如果选择输出全文,那么会在feed里会同时输出摘要和全文,只不过摘要在description字段,而全文在content:encoded字段里。这时,RSS阅读器(通常是在线RSS阅读器)可能会自行决定显示摘要还是全文,也有的RSS阅读器(通常是桌面RSS阅读器)会让用户选择显示摘要还是全文。
Firefox开发组的官方解释是,他们认为在Firefox里打开了一个feed的,就是为了预览一下feed,以决定是否订阅。而显示摘要,每篇文章只显示很短的一段摘要文字,方便了预览。所以,从Firefox 2.0开始,feed都只显示摘要。为此,当时feedsky开发组还专门做了研究,弄了一个小hack来防止Firefox输出摘要,好像是在烧录feed时在feed前面加上200多个字节的注释。
我的Blog的feed,从Blog创建之日起都是输出全文的,在Firefox2里查看一下源代码就可以看到了。
多谢你的答复。我也认为本不相关的。可能是恰逢换主题,加插件,很多参数改动过多的原因吧。现在采用feedsky的输出,已经回到全文rss输出了。
请问为什么我点击阅读全文,会激活新的窗口,而不是在原来的窗口转跳?
请问,可以为
加参数,限制输出字数吗?
我的中文工具箱也不起作用。
你好,刚使用了你这个插件。感觉不错。但有个问题想请交下。我原来文章的第一段属性为H1,可用了这个后H1属性丢失了。不知道是什么原因。能否帮忙解答下。
非常感谢。
可以用在wp2.5上吗,我试过了好像没有什么变化,还是显示全文,我用的是默认模板:(
רҵ
插件不错,我在用,支持一下。http://www.kaxi.net
test
有个问题,摘要用段落为单位会不会不太好,比如我设定最大字数200,段落5来说,某篇文章前4段都只有几个字,偏偏第五段有500个字,那岂不是输出500字以上,显得太多了,如果5段都只有几个字,那又太少了。。。。。能不能改个只根据字数输出摘要的~~~~
确实是好插件~~
我看到一个人的主页也可以用啊
“帕蓝映像”
用了中文WordPress工具箱。但就是首页摘要能起作用,其它的比如最新评论,评论最多的人等好象不起作用。
רҵ
JAJA, UPYACHKA! UG NE PROIDET, BLYA!
装上了,但好像没有反应,不知道是怎么回事,我另外一个wp站也是用这个插件正常运行,真有点怪了。继续调试吧,哎。
很强大