152009
2009-06-14更新:自从WordPress 2.8开始,这里的正则表达式又变了,经本人测试,'(.?)\[('.$tagregexp.')\b([^\[\]\r\n]*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)'是有效的。

两天捣鼓Wordpress,遇到了无数的问题,估计Google不下百次,有些问题实在诡异,不过幸好都让我找到了答案。例如,昨天被这个问题搞得几乎崩溃:有的帖子在更新发布之后就变成空白了,刚开始我以为是数据库连接问题,后来在phpMyAdmin中检查了一遍又一遍,甚至直接更改数据库,都没法让文章显示出来,于是又去查codex,看the_content()等函数,依旧无果。最后在千般尝试下,发现把文章删除一部分文字之后就可以显示出来了,于是我意识到这与被删的文字有关,但从未听说Wordpress系统对文章内容有审查啊,所以应该不是关键词过滤的问题,我于是一句一句话地删除,看删到哪里之后文章就发不出了,最后统计了一下字节数,但这个数字对解决问题根本没用,因为不能因此就避免长文章。

我想来想去,想到了可能是插件的问题,由于需要“头文字”效果,我安装了TinyCode插件,它的内部用到了WP的shortcode。在将TinyCode禁用的情况下,长文章可以显示,问题便找到了:出在shortcode上。继续Google,发现几个月前有人出现了类似的问题,一位德国高手提供了解决方案,修改/wp-includes/shortcodes.php文件。找到:

function get_shortcode_regex() {
	global $shortcode_tags;
	$tagnames = array_keys($shortcode_tags);
	$tagregexp = join( '|', array_map('preg_quote', $tagnames) );

	return '\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?';
}

将正则表达式替换为:

	return '\[('.$tagregexp.')\b([^\]]*?)(\/)?\](?:(.+?)\[\/\1\])?';

这样问题便解决了。Wordpress这么完善的系统也会有Bug……

爷还想看:

2 Responses to “超长文章在WordPress中不能显示的解决办法(与shortcode有关)”

Comments (2)
  1. cloudly 说:

    已经转过来啦啊?速度啊!
    最难得的就是RSS订阅一如往常……
    不知道文章301永久重定向做的怎么样了?

    • 谢益辉 说:

      高手就是高手,一眼就看出关键问题了,哈哈

      我在搬家之后往404.php中写了一段发邮件的代码,只要出现404错误就给我发一封邮件,看看REQUEST_URI等参数都有什么规律,然后挨个写301转向,这个期间对PHP的字符操作又熟悉了不少,哈哈,到现在基本上所有的404都转301了 :grin:

Leave a Reply

(required)

(required)

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie