WP 2.1 和 UTW 的兼容性问题
这个问题对用 UTW 和 Wordpress 2.1 的同学们来说,比较严重。
也许有人已经发现了,当你升到 Wordpress 2.1 后,只要有人在你的帖子上留言,或是发 Trackback 或是 Pingback 的时候,帖子的 Tag 就会消失(是被删掉,事实上)。说原因前我先贴一下修补 (via),然后有兴趣的同学再慢慢看原因。
打开 /wp-content/plugins/UltimateTagWarrior/ultimate-tag-warrior-actions.php
在大概第 862 行你会看到:
// Save changes to tags
add_action('publish_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
add_action('edit_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
add_action('save_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
add_action('wp_insert_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
把这些代码注解掉,换上:
// Save changes to tags
add_action('save_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
if($wp_db_version < 3308 ) { // if lesser than WP 2.0
add_action('publish_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
add_action('edit_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
add_action('wp_insert_post', array('UltimateTagWarriorActions','ultimate_save_tags'));
}
这就把问题解决了。
问题的原因 Mark 在他的 Blog 上做了解释。其实这个问题并不单是 Wordpress 2.1 的原因,其实在更早的版本这个问题就是潜在存在的,不过是在 2.1 版上被带了出来。也并不单是 UTW 受影响,还有一些比如 Jerome’s Keywords 等等往 Custom Field (自定义域?) 里写数据的插件都可能受到影响。Mark 的说明细节部分我就不重复了,有兴趣的人可以去看。简单来说我理解成:这不是我们的问题,这是插件作者的问题,你们对 WP 的机制理解的不够,你们犯下这样这样的错误,你们需要如此如此才行。:wink:
通俗来说,插件作者编写插件让插件自动监视编辑文章的表格,如果是空的,插件就认为文章已经被删除,于是也会把自己在这篇文章的 post_meta 数据删除,这就是为什么 UTW 的 tag 会不见,因为被它自己删除了。但在 2.1 中,edit_post 并不是一定要在写文章或编辑文章时才会调用的,也不是一定要是注册用户的动作才能引发调用的。比如说留言就能引发 edit_post 被调用,这个时候,插件监视到的是一个空的 edit_post,它认为这篇文章已经被删除了,它就非常“智能”地清空了自己留在 post_meta 里的数据。
我用到的往 Custom Field 里写数据的插件包括 UTW, Article 和 Postviews,检查了一下,好像除了 UTW 其余两个都没事。大家也可以检查一下自己的插件,如果发现 Custom Field 里面的数据被抹除,可以联系插件作者请修改一下。
更新:看来留言的时候不一定有事,但当你审核留言时,同意后,该留言对应的文章 Tag 会被删掉。虽然审核留言的时候不多,但还是打一下后面的补丁以防万一吧。
再更新:最新的 3.14159265 版的 UTW 宣称解决了上述问题。
Blogmailr 和 UTW 的配合使用
Blogmailr 是一个不错的应用,可以通过向指定邮件地址写 email 来发布 blog。让 Wordpress 支持 email publishing 原本是一件很麻烦的事,也是让我很不爽的事。为什么让我不爽?因为我一直在想,如果哪天去旅游,可以用 email 写 blog,配合可以 WAP 的手机登陆 Gmail 进行发布会很方便。也许只是三言两语加上一模糊的照片,但可以让大家看到自己每天的见闻,应该是一件很酷的事情。但 Blogmailr 能够很好的解决这个问题,除了 Wordpress 它还支持很多 流行的 Blog 发布软件。
不过 Blogmailr 有一点不好的是,对中文的 Tag 支持不尽人意。比方说,如果在信的内容里使用 这种格式的话,照理这篇文章就会被放到相应的分类下 (tag1, tag2, …)下。可如果你使用了中文目录的话,Blogmailr却是不解释 这个命令的,这让我很恼火。不过这两天从 Jerome’s Keywords (JK) 转到 UTW (Ultimate Tag Warrior) 后,Blogmailr 终于变的实用起来。
UTW 有一项功能叫做 "Embeded Tags",可以让你在文章中使用 [ta g]…[/tag] 或是 [tag s]…[/tags] 标签来向 UTW 表明你在这篇文章上打的 Tags。因此只需要在信中使用 UTW 格式的标签就能弥补 Blogmailr 的缺陷了,如果你用 UTW 把 Tags 转成了 Catetories 的话,甚至可以指定发布时的分类。
我准备对这篇文章用这个方法试试看,成功了在文后更新。
Update: 看起来成功发布了。有一点小问题就是 tags 中会多了一个 … 的 tag, 我在官方的论坛上提交了这个 bug 希望他们尽快能改正。我还有一个希望就是可以在邮件中自定义 Post Slug,因为像我这样用了 Pretty Permalink 的人必须用英文的 Post Slug,否则浏览器中显示的地址是乱码,听说还会影响 SEO 的,似乎。

