WordPress的一些小缺点


WordPress 2.6发布了,说实话我并不是很喜欢这个版本。虽然WordPress 2.6增加了一些新的功能,对安全性方面也有了一定的提升,例如对SSL支持等,但是它对数据库的整洁来说,还是一团糟。

新版中增加的一个重要功能是Post Revisions(文章的版本控制),作者可以对比查看文章的不同版本,并恢复到以前的状态。但是,文章的不同版本,数据库中该放在哪里呢?答案是wp_posts。默认状态下,所有的实质内容都记录在这个数据表中,包括文章、图片视频音频等信息。而wp_posts的PRIMARY KEY为ID,于是一篇文章常常要占用3个不同的ID,它们记录了文章的3不同状态Current Revision、Autosave、Revision,也就是当前版本、自动保存的版本还有以前的版本,如果修改过多次,就会出现revision-2,revision-3…  于是乎,文章的Id不再连续了,特别是Permalink结构为archives/123形式的博客,上一篇为archives/100,当前这一篇可能就是archives/105了,看起来是相当的乱啊。

WordPress真的很吝啬,这么多版本过来了,数据表的数量仍然是10个,我想只要增加几个数据表,WP的数据就不会显得那么凌乱。本人并不提倡像ExpressionEngine这样,数据表多达68个,但20个以内并不过分吧。

个人建议增加的数据表有:

  • wp_temp:存储临时文件,如wp_options中的rss内容、wp_postmeta中的edit_lock和edit_last
  • wp_plugin:存储插件的配置信息,这样就不至于因为安装太多插件而把wp_options弄得一团糟
  • wp_revision:用来记录文章的旧版本及自动保存的内容

这样,只要做一下简单的清理,数据库就显得有条有理了。

WordPress的其它问题还有
1. 数据表wp_options中category_children、rewrite_rules的option_id总是不断改变
2. 如果你编辑过WordPress目录下的.htaccess,只要进入Settings - Permalinks,即使没有点击”Save Changes”,.htaccess也会追加以下内容:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

这极易导致服务器500错误。建议安装后WordPress后,将.htaccess文件的属性改为只读。

WordPress的功能是越来越强大了,伴随而来的是文件体积的增长,现在的wordpress-2.6.zip都已经1.44MB了。有时候我在想,我只不过想要一个简单的blog程序而已,有必要用一个庞然大物吗。有点期待Sablog 2.0的到来,只是小A迟迟不发布,难道要等到传说中的奥运?

Update:经williamlong的提醒,原来Post Revisions是可以禁用的,只要在wp-config.php文件中增加一行define(’WP_POST_REVISIONS’, false);就可以了,williamlong说得对,应该在设置中增加启用/禁用选项,毕竟类似Wiki那种文章历史版本控制对一般的Blogger来说没多大意义。

WordPress URL格式的缺点

众所周知,WordPress的URL自定义功能(WordPress称之为Customize Permalink Structure)十分强大,但是,它对URL格式的处理却不怎么理想。假设WordPress安装在blog目录下,我举几个典型的例子说明一下。

当Permalinks格式设置为/%postname%/时,
各链接格式分别如下:
文章链接:/blog/post-name/
分类链接:/blog/category/category-name/
存档链接:/blog/yyyy/mm/,如/blog/2007/10/
不可否认,这样的链接格式相当不错,简练工整,对搜索引擎也十分友好。

当Permalinks为/entry/%postname%/格式时,
各链接格式如下:
文章链接:/blog/entry/post-name/
分类链接:/blog/entry/category/category-name/
存档链接:/blog/entry/yyyy/mm/,如/blog/entry/2007/10/
显然,分类链接和存档链接中的”entry”并不是我们希望出现的。

再换一种Permalinks,/%post_id%.html。许多人认为加上”.html”,网页看起来更像静态页面,有利于搜索引擎的收录。本人也比较喜欢这种格式。
请看各链接格式:
文章链接:/blog/post_id.html,如/blog/123.html
分类链接:/blog/category/category-name
存档链接:/blog/date/yyyy/mm,如/blog/date/2007/10
大家注意到了吗,分类链接的最后少了一根斜杠”/”,这对SEO来说并不是很好。/blog/category/category-name,浏览器请求的是category目录下的category-name文件,而/blog/category/category-name/浏览器请求的是 category-name目录下的索引文件,两者之间的区别是非常大的。存档(Archives)链接也存在着同样的问题。
还有,存档链接中”date”关键字的加入,虽然可以用来区分”post_id”与”yyyy”,以防止请求混乱,但我个人觉得去除”date”链接形式更统一,更工整,只是不清楚这样做是否存在一定的技术难度。

对WordPress Permalinks的建议总结如下:
将分类链接固定为/blog/category/category-name/的形式,绝不能因Permalinks设置(如加入”entry”,”archives”等)的改变而变化,并且链接最后的斜杠”/”不能缺少,存档链接的斜杠同样不能少。

希望WordPress的开发人员也发现了这个问题,让WP越来越完善。