'WordPress插件' 分类的存档

UTW导致搜索功能异常

自从3月底搬了家,到现在一切都还顺利。就是有一点,搜索功能好像有点问题。

K2有一个Live Search功能,直接在搜索栏输入要搜索的文字,搜索结果就会在左边显示出来了。我要找旧文章时都是使用这个即时搜索功能,感觉非常方便。这几天经常出现文章搜不到的情况,明明记得自己写过某篇文章,但是就是搜不着。在搜索框输入搜索字符串后,即时搜索显示没有,点回车,WordPress的搜索也显示没有,再到后台文章管理页面,也搜不到。没办法,只好打开Google用“关键词 site:yskin.net”搜索,结果一下子就找到了。

分析了一下,搜不到的几次都是中文关键词,但也不是所有中文都搜不到,有的没问题有的就不行。搬家以后,MySQL版本由4.1变成了4.0,所以我怀疑是MySQL 4.0对中文支持不好导致的问题。直接进PHPMyAdmin,用SQL语句查询同样的关键字,却没有问题。于是改了一下wp-includes/wp-db.php文件,把所有SQL查询语句写入一个记录文件里,找到了搜索时的查询语句:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts LEFT JOIN wp_post2tag p2t on wp_posts.ID = p2t.post_id INNER JOIN wp_tags on p2t.tag_id = wp_tags.tag_id WHERE 1=1 AND (((post_title LIKE '%授时%') OR (post_content LIKE '%授时%'))) AND (post_type = 'post' AND (post_status = 'publish' OR post_status = 'private')) OR wp_tags.tag like '%授时%' GROUP BY ID ORDER BY post_date DESC LIMIT 0, 10

很明显我用的tag插件Ultimate Tag WarriorUltimate Tag Warrior在这条语句里加入了一些代码,使得WordPress的搜索功能不仅可以搜索到文章标题和文章内容,也可以搜索到文章的tag。把这条SQL语句拿到PHPMyAdmin里,测试了一下,最终发现把"INNER JOIN wp_tags"这部分的INNER JOIN换成LEFT JOIN就可以了。

记得以前看MySQL文档时看过这部分的介绍,不过讲的不是很清楚。上网查了一下,在这里找到一段说明,原来LEFT JOIN可以确保左表中的所有行出现在结果集中,如果左表中的某一行在右表中没有匹配,则结果集中属于右表的列为空值。而INNER JOIN,结果集只包含左表和右表都匹配的项,也就是说只返回一个交集。看了一下,我要搜索的文章没有加tag,所以才搜不到的,汗。

在UTW的ultimate-tag-warrior-actions.php文件里找到了罪魁祸首ultimate_search_join()函数,查了一下,这个函数是2007年1月17日发布的UTW 3.1415926版被加入的,更新日志最后一条写到:"Search includes tags [I worry about this bit! let me know if you see anything weird]"。我没搬家前用的WordPress 2.0系列,插件都没升级到最新版,所以才没有遇到这个问题。

报了bug,或许等一段时间就有更新了。或者,我应该给所有文章都加上tag,这样也不会有问题。

软件总是会有bug的,无论大小。Windows最近被发现了一个.ani文件的漏洞,影响从Windows 2000到Windows Vista系统。[via]WordPress开发组里的都是大牛,但是WordPress自带的演示性插件Hello Dolly一样有小bug。所以,我们要习惯bug这种事情,就像蔡康永要习惯女人怀孕这种事一样。

WordPress 2.2开始内置了对tag支持,不知道UTW以后怎么办。不过,由于UTW是目前最流行的tag插件,所以WordPress 2.2里加入了一个从UTW中导入tag数据到WordPress核心的工具,对于UTW用户这是个好消息。看来,随大溜还是很必要的,另一个以前也很有名的tag插件Jerome’s Keywords的用户就没这么幸运咯。

Google Sitemap Generator中文包

从开始用WordPress架Blog不久就用了这个Google Sitemap GeneratorGoogle Sitemap Generator插件,因为2005年底就接触了Google Sitemaps,当时好多文章都介绍了说这个东东可以提高Google收录的速度。blogger.com时代用了在线工具建立sitemap.xml文件,转用WordPress之后就立刻找了建sitemap.xml的插件。

今天趁着升级到WordPress 2.1系列的机会,把插件过滤了一遍。Google Sitemap Generator的稳定版一直都是2.7.1,而3.0版从2006年1月就开始beta了,到现在都beta 6了。以前对"beta"很敏感,觉得beta版都是大牛们用的,普通用户还是用稳定版的好。现在懂的多了,就不怕了,毕竟Gmail从2004年4月到现在不还是在beta吗?这个插件目前的最新版本是3.0b6,是2007年1月底发布的,为兼容WordPress 2.1系列做了些改进。新版本里带了很多语言包,也包括繁体中文包和简体中文包,但都是2.7.1时代的,po文件里的信息都是2005年的。在Google里搜了下,网上没人做简体中文包,只有Kirin Lin做了个繁体中文包,于是下载下来,参考着开始做简体中文包。

2.7.1的中文包是june6th(june6th@gmail.com)做的,看起来是直接把Kirin Lin的繁体中文包繁体转简体后生成的,翻译的都一样,还有一处"頁面"没换成简体。我没有直接拿繁体中文包进行繁转简,虽然Word的简繁转换功能很不错,而是参考着重新做。繁体中文包里写的项目名里的版本号是3.0b7,可是插件主页上的最新版本是3.0b6。在插件的svn里找到了3.0b7,下载下来,确实比3.0b6多了一项功能并修复了几个bug。在svn上看到几个小时前作者刚更新了readme文件,看来作者最近又开始关注这个插件了,希望3.0早日脱离beta。

124项字符串,过了一遍,参考了繁体中文包里的翻译、后台页面里的上下文以及在源代码中的上下文,耗时一个半小时翻了出来。翻译的过程中遇到了一些无法翻译的文字,都是因为作者的代码没写好。另外在Kirin Lin的繁体中文包里发现了一些错误。比如,有两个句子大致是一样的,区别只是一个讲的是Google一个讲的是Yahoo,小林翻译好上面Google那句,就直接复制粘贴到下面Yahoo那句,却忘了把"Google"一词改成"Yahoo"了。还有"in seconds"被翻译成“几秒内”,那是个注释,意思是前面要求输入的数值单位为“秒”。还有abbr标签被写成"attr"了,我说怎么这个标签看着怪怪的呢,呵呵。另外,从去年4月我开始用的这个插件的时候,就对"优先级中 (如果自动计算没有打开)"这句话相当疑惑,无奈当时又不懂PHP,也就没再细研究。今天又在繁体中文包中看到这句话,再看一眼英文原文,"Minimum post priority (Even if auto calculation is enabled)",原来是“最小文章优先级(即使优先级自动计算被启用)”,指的是在优先级自动计算的过程中,要求最后的计算结果不得低于这个值。我就这样被蒙蔽了一年...

其实总体还是不错地,上面只是些小瑕疵。在繁体中文包里发现原来FAQ在台湾被翻译成“答客问”,挺好玩的。台湾人好像对中文很热爱,很多英文单词都尽量翻译成中文,比如“视窗系统”、“部落格”。而且在翻译上大多力求完美,翻译成通顺的中文而不是一个单词一个单词的翻译英语式中文。所以在做翻译时有繁体中文包可以抄真是件幸福的事。好像法国人也很热爱自己的母语,前两天报纸上说欧盟最近要庆祝成立50周年,制作的庆祝标志因为用了英文的"together"而被法国抗议。其实,我也很热爱中文,所以英文才很烂的。这个理由不错吧?嘿嘿。

cqcrz总说很羡慕我码字的能力。可是看看去年4月写的这篇《Google Sitemap Generator》,通篇只有两行字而已。所以,码字的能力是锻炼出来的。今天既然把这个插件好好的研究了一遍,就把这篇文章扩充一下。不知道这次能码多少字。

Google Sitemap Generator 3.0b7 简体中文包,下载后丢(这个词是跟小林学的)到wp-content/plugins/sitemap目录里就可以了。目前最新的3.0b7版可以在这里下载。

My Category Order——WordPress分类顺序插件

My Category OrderMy Category Order这个插件的作用在于可以自行设置侧边栏里分类列表的显示顺序。WordPress默认分类列表是按照名称顺序显示的,修改一下调用函数的参数后也仅可以使用分类ID顺序。正因为有很多人希望自己的分类列表的排序方式能够自行控制,所以,My Category Order插件应运而生。

激活这个插件后进入“管理->My Category Order”页面,插件会自动为wp_categories表添加一个名为"cat_order"的列。插件会把分类序号存在这一列里。然后,我们需要手工修改sidebar.php文件(如果使用了SBM则需要修改相应模块文件),在wp_list_categories()函数的调用参数里加上orderby=order一项,让WordPress在输出按这一列排序。

插件的后台很简单,上面显示当前的所有分类的下拉列表,选中一个即可进入该分类。下面按顺序显示分类,可以选中一个后通过“向上”“向下”两个按钮调整他们的顺序,调整好后即可点击后面的按钮保存顺序信息。如果分类层次比较多的话,一个一个进入也挺麻烦的。不过还好,分类顺序也不需要经常调整。

另外,插件无视没有文章的目录哦。所以只有有文章的分类才会在插件后台显示出来。

另外有一个插件Category OrderCategory Order,它更复杂一些,调整也更容易些。不过,我觉得这个插件太小题大做了,它把WordPress的输出整个截取下来做处理,不如My Category Order插件来的巧妙。

开始使用K2模版自带的SBM

2006年7月低,K2 r16版里加入了SBM,从此以后,K2模版用户可以很方便地控制自己的sidebar,而不用再辛苦地修改sidebar.php文件了。

一直没研究SBM,这两天抽空研究了一下,发现还是蛮好玩的。

继续阅读《开始使用K2模版自带的SBM》

Yskin's Latest Posts——WordPress最新文章插件

昨天和今天研究了一下K2自带的SBM,把我的sidebar改用SBM来控制。改到最新文章时,发现K2自带的latest posts模块和K2的sidebar.php文件里的代码不一样。sidebar.php里只有一条语句:wp_get_archives('type=postbypost&limit=10');,latest posts模块里却用了

$latest = new WP_Query($query);
foreach ($latest->posts as $post)
{setup_postdata($post); echo ...}

联想到几天前alonefly大大提到的模板中的判定问题,去查了一下hoofei4模版。hoofei4用的是:

<?php query_posts('showposts=10');
if (have_posts()) : while (have_posts()) : the_post();
echo ...
endwhile; endif; ?>

hoofei4模版里这样用显然会导致之后的代码无法判断当前页面类型,is_home()之类的函数返回值已经不正确了,无论什么页面,在此代码之后的is_home()函数都会返回true。别的不说,hoofei4模版sidebar里定义链接列表和meta为只在首页和page页显示,可是http://www.hoofei.com/网站里所有的页面,包括文章页存档页都会显示这两样。

我特意在我的Blog上做了测试,hoofei4模版的用法会影响is_home()等函数的判断,而latest posts模块的用法却不会,可能是因为新建了一个WP_Query对象的缘故吧。不过,setup_postdata()函数还是会影响几个全局变量,而且执行速度也较慢。

不知道这样的代码是从哪里来的,谁最先想出来的。可以肯定的是,他是一个高手,懂得用query_posts()函数,但是,他却不知道WordPress提供了最新文章功能,只要调用一个函数即可。呃,我推测,可能是以前WP 1.5或者1.2的时代里,WordPress还没有提供这个函数,所以有人写了这样的代码,后来被人抄来抄去,就流传到了现在。

不过,WordPress自带的还是不能满足我的要求,我想显示的不是最新发布的文章,而是最新修改的文章。7月12号,我从wp-includes\template-functions-general.php中的wp_get_archives()函数里抄了一段代码,修改为显示最新修改的10篇文章,放在sidebar.php里。现在,我又把它改了一下,做成最新文章插件,并提供对SBM的支持。

这年头是不是每个WordPress插件作者都要写一个自己的最新文章插件和最新评论插件啊?嘿嘿。

请移步到“Yskin's Latest Post”主页下载软件并查看更多信息。

Feed Control Plus——为WordPress提供更多feed控制选项

11月17号开始写这个插件,现在事12月16号晚上8点整。哈哈,这个插件花了不少时间,现在回过头来看,倒是有点怀疑我是否该把插件写得那么复杂。

本插件的葫芦是Feed ControlFeed Control

今天先release着,明天再详细的写,嘿嘿。

抓虾在以前一直都是不读取文章的更新,一篇文章读进来什么样子就是什么样子,文章更新了抓虾也不更新,前段时间开始读了,后来又停了,真是○○××。唉,Bloglines又慢,或许,要是Google收购了Bloglines,速度应该能快起来。

汗了,好像没放上page的链接。我要feedback啊feedback。

请到Feed Control Plus插件主页查看更多信息以及下载插件。

Admin Drop Menus——为WordPress后台增加下拉菜单

AIP评论里说,Admin Drop Down MenuAdmin Drop Down Menu插件在IE下不好用。

这个插件我是6月份才开始用的,而Firefox我从3月就开始用,并在此后很少再碰Maxthon了,所以我并没有注意到这个问题。在插件源代码里转了一圈,改了一通CSS也没解决这个问题。后来想了想,还是Edward说的对,换个插件就是了。

在Google里找到Admin Drop MenusAdmin Drop Menus插件。这个插件确实可以把WordPress后台装扮的很漂亮,比起Admin Drop Down Menu好看得多。并且,插件只修改了menu部分,不像WP Tiger AdministrationWP Tiger Administration那样修改了后台页面的整体布局。
Admin Drop Menus

不过这个插件有一个缺点,我的后台的字体显示成繁体的样子。看了一下CSS,里面定义了很多字体,包括日文等等。我在里面加了宋体,显示出来的效果还可以。

这个插件的作者写了好几个Admin Drop Menus插件,代码大体一样,只是样式不一样,分别取名叫Native、SpotMilk、Autumn风格。有一个特殊点的叫Admin ‘Advanced’ Drop MenusAdmin ‘Advanced’ Drop Menus,既然写明是‘Advanced’高级的,那么我就试试。看起来这个插件把menu修改得更面目全非,不过也更漂亮。不过还是有一个缺点,一级菜单已经不能点击了,只能点击二级菜单,这下写新文章要点两下了,不爽啊。
Admin ‘Advanced’ Drop Menus

Admin Drop Menus这个系列的插件适合喜欢漂亮的人,还有使用IE的人。我还是用回Admin Drop Down Menu,它在我的Firefox下工作的很好。

Extended Live Archive中文版

Extended Live ArchiveExtended Live Archive这个插件,我在6月份就安装了。这是个很不错的插件,知名度也很高,使用者众多。

昨天Edward跟我说想汉化ELA,昨晚他就做完给我发过来了。中午花了一个小时把中英文版对照看了一遍,提了一些修改意见,下午Edward就修改好,正式发布出来了。大家可以到Edward的这篇《Extended Live Archive 汉化版!》文章里下载。

天佑的这篇Extended Live Archive 0.10 版本教学把ELA的方方面面都讲到了,在安装ELA之前一定要看一遍。(天佑写的教程,比如ELA和UTW的,真是不错)而我的K2模版提供了对ELA的支持,安装ELA插件并激活后,到K2选项里点一个按钮,K2的Archive页面就会显示出来了,呵呵。

汉化真的是件满累人的事。不说汉化者Edward,我校对一遍都要一个小时。英文和中文的很多说法不一样,有些地方要字斟句酌地考虑。很多时候要采取意译的方法,用中文把作者要表达的意思正确的表达出来,而不是一个词一个词地翻。而且,在准备对软件进行汉化之前,先要用过一段时间这个插件,把他的主要意思搞透,然后才能进行汉化。

不过,中文版也不是万能的,虽然后台的选项被汉化了,不过有些选项的说明写的不多,用户可能并不清楚这个选项具体是干什么的。另外,插件的安装、使用过程,以及出现某些问题的解决办法(比如ELA要设置cache目录的权限),都不是中文版能解决的。不仅WordPress插件如此,WordPress本身也一样。所以,天佑写的ELA教程就尤其显得重要。如果要比较的话,中文教程可能比中文版更重要些。天佑不仅写了ELA教程,把ELA的方方面面都讲全了,而且还及时地、正确地、不厌其烦地回答网友们提出的问题,真是pfpf呀,ELA作者应该好好感谢他才是。不过在网上经常看到有人在找中文版,而不是去找教程。中文版只能让用户看懂选项而已,中文教程可是解决安装问题的关键啊。所以,希望大家多多地看看教程,也希望中文WordPress世界能有更多的插件教程出现。

当然,Edward的ELA中文版的重要性也是不容抹煞地!感谢Edward为ELA在中文WordPress世界的普及做的贡献。不过,要是被我发现有翻的不好的地方,也是要鞭打地,嘻嘻。

Feedburner Feed Replacement插件的一个bug

今天偶然间发现了Feedburner Feed ReplacementFeedburner Feed Replacement插件的一个bug。这个插件没有对Page的feed进行处理,导致Page的feed也会被转向到FeedBurner。不过倒是很多人也不会把Page的留言功能打开,不过做留言板的就会开了。比如我的http://yskin.net/wordpress/feed/地址就被转向了。

解决的方法也简单,把Feedburner Feed Replacement 2.1的第66行代码加上!is_page()的判断。

给作者去了email,等作者更新吧。

Update:等了很久没等来作者的更新,好奇怪...

Update2:今天研究了一下Feedsky PingFeedsky Ping插件,他好像什么都没检测呀不仅Page,连post状态还有archive状态都没有。而且看起来代码和Feedburner Feed Replacement也很象。最近出了很多FeedBurner转向插件,做的都很象,真是伤脑筋,国外的版权意识应该高一些吧。

另外,也相当不理解,为啥要有个Ping插件,貌似WordPress自带Ping功能,用不着专门写个插件。这根本就是一个feed转向插件嘛。

Update3:晚上突然想到,page的feed是返回文章原文的,post的feed是返回文章评论的。wp-feed.php里用的判断语句是if ( is_single() || ($withcomments == 1) ),所以,自己加?withcomments=1也能看到评论feed。突然领会了在这里看到的一句话,“WP的Page一直处在一个尴尬的境地,很多写插件和模板都会单独写一个会长期更新的Page,但是Page又不会被收入到Feed中。”

Update4:插件好像只加了分类的判断,没有加archive的判断,每个年、月、日也有自己的feed嘛,唉。

更新了几个WordPress插件

前几天装了Viper's Plugins Used插件,今天跑到Plugins Used页挨个检查了一下各个插件,看看有没有更新。老实说自从装了WordPress以来,我好像一次也没检查过插件的更新。谁叫WordPress不象Firefox那样可以自动检查Firefox扩展的更新呢?(正说着,Firefox弹出更新提示,Firefox 1.5.0.7发布了,汗!)再加上我又很懒,唉!一些插件比如SK2有进入插件设置页面自动弹出更新提示的功能,不过我也很少去设置页面逛呀。唉,考虑一下是否应该写一个自动检查插件更新信息的插件。

Audio playerAudio player更新到了1.2.3,添加了一个背景颜色的选项。以前Audio player的背景总是透明色,现在作者说透明色在某些Firefox浏览器和某些模版下工作有问题。我不管了,我还是喜欢透明,而且在我的Firefox 1.5.0.6和K2模版里没问题,到设置页面把Transparent打上了勾。

Feedburner Feed ReplacementFeedburner Feed Replacement,2006.9.8更新到2.1版。这个版本比起2.02有很大的修改,彻底弃用了通过.htaccess文件来重定向的办法,而是直接向浏览器输出"HTTP/1.1 307 Temporary Redirect"。而且现在也不再需要使用以前那种生成随机地址填入FeedBurner的方法了,真是方便啊!我记得通过.htaccess来重定向输出的是HTTP 302吧,现在改成输出HTTP 307,让我立刻想到了以前写过的《FeedBurner订阅数统计的问题》可能已经解决了。到抓虾看了一下显示订阅数的代码,fb上的地址的订阅数是11,"yskin.net/feed/"的订阅数开始是10,过了两分钟刷新了一下,突然变成了17,并且访问量也跳到了900多。原来用了HTTP 307,抓虾就能知道两个地址确实是同一个呀,估计Bloglines也应该能识别HTTP 307。记一下今天FB上的显示:抓虾是16,Bloglines是9。明天估计会跳一下了。哈哈,HTTP 307真是个好东西啊。大家应该赶快升级到Feedburner Feed Replacement 2.1,把FeedBurner里的原始feed地址改回来,再进一次插件设置页面,OK了。

Ultimate Tag WarriorUltimate Tag Warrior,这个插件装上后就没再检查过更新。从3月份装了3.1版,一直用到现在。稍微看了一下,7月12日发布的UTW 3.14添加了把tags添加到页面head部分的meta keyword里的功能。另外在文章编辑页面的Tag Suggestions功能可以同时点击两个按钮而不会出现js错误了。8月10日的UTW 3.141则提高了对WordPress 2.1的兼容性,并修正了一个大bug:“当一篇文章没有任何tag的话,每一次有人看那篇文章,就会在wp_postmeta table内新增一条record。”[via]9月11日的UTW 3.1415(版本号越来越奇怪了),只是一些bugfixes,把已经失效的Tagyu去了,现在我们只能从Yahoo得到Tag Suggestions了。