http://cn.yflying.com/2010/07/wordpress%E6%96%87%E7%AB%A0%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/
WordPress后台中编辑的内容最终显示在WordPress博客的网页之前,WordPress会对该内容进行多次处理。处理过程中将过滤多余代码,且会将内容转换成浏览器可翻译的格式。若用户不了解WordPress文章内容过滤的细节,会造成不必要的变化。
变化和过滤主要发生在 wp-includes/formatting.php文件中。详细代码功能和特征参见 the file source code。
问题
用户在使用内容过滤函数和处理函数时遇到的典型问题包括:
保存文本后,空白段落、关闭的span标签和换行符元素被删除
类从元素中被删除
DIV元素被转换成P元素
脚本和代码被转换成可显示代码而非可执行代码。关于如何将Java脚本植入博客文章,请参阅 使用Javascript。
WordPress的处理流程
以下是对WordPress在最终发表前处理文章内容的逐步介绍。
1. TinyMCE
TinyMCE 是WordPress的富文本编辑器。不是所有WordPress博客都使用TinyMCE,但一旦使用,TinyMCE会帮助用户将保存的内容转换为可发表的代码。
2. 函数wpautop()
wpautop()是一个重要的WordPress函数,可自动处理、校对并修改文章内容。该函数保留换行符和段落标签,开启应开启但关闭了的标签,关闭应关闭但未关闭的标签,清除重复的HTML标签。
3. Texturize
Texturize (wptexturize()) 是一款文本过滤器,默认情况下Texturize会修改已发表的文章或评论,然后输出更方便阅读更具吸引力的内容。
Texturize生成具有美学效果的内容的同时,也为在编程语言中发表代码示例带来了不便。在这种情况下最好不要修改文章内容,否则可能会生成语句错误的代码。
有些示例包括:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"quoted text" becomes “quoted text”
'quoted text' becomes ’quoted text’
--- becomes —
-- becomes –
... becomes …
(c) becomes ©
(r) becomes ®
(tm) becomes ™
'' becomes ”
`` becomes “
president's becomes president’s
presidents' becomes presidents’
12' becomes 12′
12" becomes 12″
2x4 becomes 2×4
4. 处理简码
WordPress中定义了简码API,用户在文章中可以使用类似[gallary id='12']这样的简码。由于这些简码都是自定义的,浏览器并不能识别这样的简码。因而在文章处理过程中,需要将简码替换为实际要输出的内容。有关简码,请参考文章《WordPress中的简码机制》。
5. 转换表情符号
convert_smilies()函数将文章、页面和评论内容中的字符组合图转换成相应的笑容或其它表情符号。例如,若激活笑容符号,WordPress就可以识别:D,并将之转换为笑脸。激活笑容符号的关键在于:在字符组合图前后添加空格。单纯的文字不会被转换成笑容符号。
如果用户不希望转换表情符号,可以在Options > Writing中关闭该功能。
6. 转换字符
formatting.php代码文件中包含大量函数,这些函数可以帮助将字符实体、重音符号以及非英文字符转换成浏览器可识别的格式。一般情况下这些函数运行状态良好,但如果浏览器未激活某种语言,该语言字符就不能被浏览器所辨别。用户可查看浏览器文档以添加浏览器可识别的语言字符。
其它
1. 阻止WordPress处理文章内容
有很多插件可以改变WordPress默认状态下的过滤处理用法。建议用户不要改变核心程序设计,用户可以使用WordPress插件来改变某些或整个内容处理过程。相关插件请参考 WordPress Plugins Directory。