WordPress 非官方中文站

提供 WordPress 插件、主题、程序及相关的中文资讯

Wordpress 2.5 标签重复问题解决方案

欢迎光临本站!我们致力为你提供更好的服务,请 订阅本站Feed 获取每天最新信息。WordPress 中文站主要为你提供 WordPress 最新的新闻,插件、主题更新的信息,入门的教程,使用的技巧,博客的资源与优化,安全问题的提醒与修复方案,以及博客相关的方方面面。

从 WordPress 2.3 开始,WordPress 加入了标签(Tag)功能。但是,WordPress 的标签没有良好的接口,使用起来并不方便,这一状况直到 WordPress 2.5.1 也没有得到很好的解决。对于中文用户而言,其中最为麻烦的一个问题就是,标签总是被重复添加,尤其是在使用标签缩略名(Tag slug)的时候。

标签重复问题

举例本站有一个标签叫“精彩主题”,缩略名为“themes-list”。但是如果你在书写新的文章的时候,在WordPress 撰写文章面板里直接添加了标签“精彩主题”,当你保存文章的时候,就发现标签的缩略名为“%E7%B2%BE%E5%BD%A9%E4%B8%BB%E9%A2%98”,这是“精彩主题”四个字所对应的UTF8 编码。

这时,你有了两个“精彩主题”标签,对应两个标签缩略名:一个对应容易看懂的英文“themes-list”,一个对应不容易看懂的“E7%B2%BE%E5%BD%A9%E4%B8%BB%E9%A2%98”。

解决方案

这个问题已经有网友向 WordPress Bug 跟踪系统报告,编号6313,被称之为标签重复问题。mtekk 给出了相应的解决方案,并将在 WordPress 2.6 中正式修复这个问题。现在你可以通过修改以下两个文件来自己修复这个问题。

1. 打开 <WordPress>/wp-includes/taxonomy.php ,大约 746 行附近:


if ( ” === $term = sanitize_title($term) )
return 0;
$where = $wpdb->prepare( “t.slug = %s”, $term );

修改为:


if ( ” === $sanitized = sanitize_title($term) )
return 0;
if ( ‘post_tag’ === $taxonomy ) {
$where = $wpdb->prepare( “(t.slug = %s OR t.name = %s)”, $sanitized , $term );
} else {
$where = $wpdb->prepare( “t.slug = %s”, $sanitized );
}

2. 打开 <WordPress>/wp-admin/wp-includes/taxonomy.php ,大约 136 行附近:

$tags_to_edit = join( ‘, ‘, $tag_names );

修改为:

$tags_to_edit = join( ‘,’, $tag_names );

这样,就应该解决了这个问题。

本站地址: WordPress 非官方中文站[http://wpchina.org/]

本文链接: http://wpchina.org/wordpress-duplicate-tags-fix-223/

Tagged as:

17 Responses »

  1. 修改为 空白?

  2. 呵呵,代码添加上了~

  3. 学习了,有技术含量

  4. 有技术含量不重要,关键是很有用 :)

  5. 修改了,还是出现重复!

  6. 我也发现这个问题,还是没解决呀

  7. [...] 参考wpchina上一篇文章的方法: 1. 打开 <WordPress>/wp-includes/taxonomy.php ,大约 746 行附近: if ( ” === $term = sanitize_title($term) )             return 0;         $where = $wpdb->prepare( “t.slug = %s”, $term ); 修改为: if ( ” === $sanitized = sanitize_title($term) )                         return 0;                  if ( ‘post_tag’ === $taxonomy ) {                              $where = $wpdb->prepare( “(t.slug = %s OR t.name = %s)”, $sanitized , $term );                     } else {                              $where = $wpdb->prepare( “t.slug = %s”, $sanitized );                     } [...]

  8. 非常感谢,这个问题搞的我十分困扰,因为我是最近新搬家到WP的,对WP只是久闻大名,没想到遇到这个棘手的问题。2个标签搞的一团糟,现在终于改好了。
    欢迎到我的博客做客,美博园 http://allinfa.com/
    今后还得多来兄弟们这里走走了。
    再次感谢。

  9. 新版2.6的标签仍然有问题,昨天升级了一下,有出现了老问题,按照这个方法修改后,仍然不行。最后不得不恢复到2.5。。。

  10. 解决不了…!
    在2.5.1是这样…升级到2.6还是这样…快疯了…

  11. 2.5.1的用这个方法成功解决了,不过升级到2.6以后发现问题依然存在,而且用这个方法也不管用了。。哎

  12. [...] 一个Tag既有名称(Name),又有缩略名(Slug),在页面上,Tag显示为Name,而在系统中,Tag被记录为Slug,每一个Tag的Name和Slug都是一一对应的。其中,Name可以定义为中文或英语,Slug要被系统记录,所以只能是英语字符,如果你将Tag的Slug定义为中文,在2.5.1中,系统会自动将其转化为一串英文+数字的字符。问题就处在这里。中文博客的Tag名称通常定义为中文,而URL里的Slug要展示英语,系统又只能用一串无意义的字符来把Name翻译成Slug,从而出现在为文章添加标签的时候,标签不断出现重复的现象:同一个Name,对应两个Slug,一个是你自己设置的正确Slug,一个是系统根据Name自动翻译的错误Slug。这就导致写博客时添加标签非常麻烦。按照这篇文章的说法,有两种解决问题的办法:其一,改文件;其二,据说会在2.6中修订这个bug。 [...]

  13. 不错不错

  14. 晕,看来还得继续寻找 2.6 的解决方案。

  15. [...] G了很久,找到了Wordpress 2.5 标签重复问题解决方案这篇文章。非常感谢Jiang大哥的分享。 [...]

  16. 盼望2.6 的解决方案。谢谢

  17. 原来我很早就到过这了:)

Leave a Reply

Comment moderation is enabled. Your comment may take some time to appear.