JKit: 部分禁用日志编辑自动保存

  在Wordpress中,日志版本管理(Post Revisions)和编辑日志时的自动保存都会在数据库中产生新的数据(编辑已发布的内容时),很显然这些数据的用处只是一时的,但却给今后数据库查询增加了无谓的额外开销。

  对于日志版本管理,我们在wp-config.php中添加一句define('WP_POST_REVISIONS', false); 即可以轻松的完全禁用此功能,但自动保存就没有这么简单,官方没有提供开关功能,现在网上找到的方法似乎都是通过屏蔽javascript脚本,这种方法虽然可行,但在某些浏览器下可能报错,同时换个角度来看,某些时候自动保存还是有些用处的,完全禁用似乎也不太可取。

  下面的代码实现了仅在编辑草稿、发表新日志或页面时启用自动保存,在重新编辑已发表的内容时则不会进行自动保存的操作,避免在数据库中产生无用的数据,方法则是在浏览器提交申请,服务器进行自动保存之前对日志的状态进行判断,如果是草稿或未找到日志ID(即新日志)则进行保存操作,否则直接退出。

Read more...

JKit: 自动在评论@用户名中添加页面跳转链接

  2009-04-02 ver0.2 Update: 支持"@用户名 "、"@用户名,"、"@用户名:"等多种形式;添加跳转链接为绝对路径,不再有分页跳转链接失效问题;链接添加类似“reply-回复的评论ID”的ID,便于使用JS实现一些特效。

  在回复评论时我个人习惯使用如Twitter“@用户名 回复内容”的形式,不过由于不像Twitter能给用户名添加链接,如果评论较多的话读者并不能很轻易找到该用户的评论,手动添加又显得麻烦,当原评论被删除时还有链接失效的问题。

  其实在Wordpress的插件库里你可以找到一个名为@reply的插件解决上述问题,它能自动给用户名添加链接,不过仔细看@reply的源代码你会发现每当它找到一个需要添加链接的用户名时就要进行一次数据库查询操作,相当浪费资源,同时它只对在评论起始处使用“@用户名”时才有效,多次或在评论内容中穿插使用都是无效的。此外@reply还有一个很大的BUG,当一个用户对一篇日志发布多次评论,你也多次使用“@用户名 ”的形式对该用户进行回复时,自动添加的链接指向的都是该用户最后发表的评论,这当然是不合理的。

  于是我自己写了一个类似功能的函数,它不进行任何的数据库查询,无论“@用户名 ”在评论中什么位置使用多少次都是有效的,链接总是指向在该回复发表日期之前该用户发表的最近一篇评论。具体效果见这里,你可以拷贝后面的源代码或使用JKit Builder生成带此功能的插件。

Read more...

JKit: 定期自动优化数据库

  在MySQL中对表的数据进行删除操作时,实际上并没有真正的删除这些记录,而是被保存在链接清单中,这些多余数据不但占用数据库的存储空间,对效率也有一定的影响,Wordpress中wpcomments、wpoptions等表尤为容易产生这些多余的数据,因为它们往往比别的表进行更多的删除或更新操作。

  使用SQL中的OPTIMIZE TABLE语句就可以对数据表进行整理,修复碎片,并且重新排序索引,提升性能,你可以通过phpMyAdmin或Wordpress插件Optimize DB实现上述语句的功能,不过它们都需要手动进行,并不方便。

  实际上只要通过下列十几行简单的PHP语句就可以在Wordpress中实现定期整理数据库的目的,需要注意的是数据库在使用OPTIMIZE TABLE进行优化时会被锁定,因此不益过于频繁的进行此项操作,下面默认是半个月整理一次,应该是比较合适的。

Read more...