- 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……
赞赏
作为一名没有固定工作的自由职业者,我非常感谢您通过捐赠的方式来支持我的写作和开源软件开发。当然,捐赠纯属自愿。无论金额多少,都是一片诚挚的心意。支付方式如下:
| 微信 | ← 奋力支开它俩 → | 支付宝 |
|---|---|---|
![]() |
其它爱心通道 ↓ Venmo: @yihui_xie Zelle: xie@yihui.name PayPal: xie@yihui.name |
![]() |
若使用 Venmo/Zelle/Paypal,请添加备注“gift”或“donation”,以免捐赠被视为我的可税收入。若使用 Paypal,支付类型请选 Family and Friends,而不要选 Goods and Services。
在不影响生活的前提下,我会将收到的捐赠以尽量大的比例回馈给开源社区和慈善机构。作为参考,2024-25 年间我共收到约三万美元捐赠,完税后我转手捐出了一万五千美元。

