WordPress 2.3加入了标签功能,我们可以在撰写文章的时候,在文章编辑框的下方输入一些以“,”分割的标签。这是一个半角的逗号,对于国内的用户来说,经常需要输入中文的标签,这时候中文输入法打出来的是全角的逗号“,”,就必须切换到半角模式或者关闭输入法,再输入一个半角的逗号,输入完了之后还要把输入法切换回来,十分麻烦。目前没有找到任何一种插件可以解决这个问题。当我研究了WordPress的代码之后,发现光写一个插件是不能达到我要的功能的,必须对现有的代码进行一些修改。这是由于WordPress代码本身有一个小小的不完善的地方。下面我给出我的解决方案,希望对大家有用:
找到WordPress安装目录下wp-includes/post.php,打开编辑,将第432行(WordPress 2.3.1版)由原有的:
$fields = array('post_author', ... , 'post_category');
改为
$fields = array('post_author',..., 'post_category', 'tags_input');
大家可以看到在这个数组的最后添加了一个’tags_input’, 这样修改的原因是:包含这一行的函数
sanitize_post 要对输入的帖子的数据数组进行过滤和转义,这个数组就是告诉 sanitize_post ,
帖子数据中有哪些键对应的值需要过滤和转义,正好漏掉了标签对应的键名“tags_input”。另外很有意思的是,我们还能在这一行的上面看到一个 TODO 注释:
// TODO: Use array keys instead of hard coded list
也就是说,WordPress的开发团队注意到了这个问题,将来会直接遍历整个数组(或对象)来进行过滤和转义而非使用这样一个列表。
接下来,将我写的以下代码保存为一个php文件,放到wp-content/plugins目录下:
<?php
/*
Plugin Name: Multiple Tag Separator
Plugin URI: http://shiningray.cn/2007/12/22/multiple_tags_separator/
Description: use other tags separator instead of the default ','.
The plugin requires hacking now,
see http://shiningray.cn/2007/12/22/multiple_tags_separator/.
Version: 0.0.1
Author: ShiningRay
Author URI: http://shiningray.cn/
*/
function multiple_tag_separator($c){
return str_replace(array(',', ';', ';', '、', ' '), ',', $c);
}
add_filter('pre_post_tags_input', 'multiple_tag_separator');
?>
或者直接下载这个文件:multiple_tag_separator.zip
解压缩后放入/wp-content/plugins目录下。
然后进入你的WordPress的后台,进入“Plugins”管理界面,找到“Multiple Tag Separator”并启用,便可使用这个功能了。


15 Comments
все может быть=))))))
Невероятно красиво!
видели видели)
Было интересно посмотреть!!!
这个插件现在不管用了,麻烦作者更新一下,wp2.6的post.php内容有所变化,请作者指导一下该怎么修改?
Спасибо. Прочитал с интересом, и вообще полезный у Вас блог
Thank you author
Пост навел на размышления *ушел много думать* :
Захватывающий матеиал. Спасибо вам за статью. Удачи и успеха вам
Спасибо. Прочитал с интересом. Блог в избранное занес=)
Hi! iigWnW
Основная задача Яндекса — давать ответы на вопросы пользователей!
Впечатлило, однако!
обновление компьютера
祝您新的一年里:万事如意。身体健康!!