3

超长文章在 Wordpress 中不能显示的解决办法(与 shortcode 有关)

 3 years ago
source link: https://yihui.org/cn/2009/05/blank-long-post-in-wordpress-and-shortcode/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

超长文章在 Wordpress 中不能显示的解决办法(与 shortcode 有关)

谢益辉 / 2009-05-15


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……

我也想转 WP 啊…… 拿小概率事件说事:中央关键词对年轻人的七项忠告

Disqus Utterances Preferences

© Yihui Xie 2005 - 2020

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK