在 WordPress 优化的时候,遇到了一个问题:HTML5 标准下,type=“text/(javascript|css)” 并不是必须的,HTML5 的默认脚本语言就是 javascript,在标准验证的时候会提示警告信息。所以有点洁癖的我觉得必须除掉这个 type 属性。
不过遇到了另外一个问题:脚本本地化函数 wp_localize_script() 似乎不太听话(因为它的工作方式是加载翻译之后的文本),常规的 preg_replace() 函数并不能除掉这个函数产生的 type=”text/javascript “ ,原因只有一个,preg_replace() 执行替换时候 wp_localize_script() 还没有运行、生成 typetype=“text/javascript”。
所以需要用到 ob_start() 与 ob_end_flush() 这两个缓冲输出函数了。
ob_start() 是打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
ob_end_flush() 是结束(发送)输出缓冲区的内容,关闭输出缓冲区。
两个函数相当于缓存开关,我们只需要在这个缓存里使用 preg_replace() 函数,问题就可以解决了。
代码如下:
- //清除文章中的 type=“text/javascript”和 type=“text/css”
- add_action('wp_loaded', 'prefix_output_buffer_start');
- function prefix_output_buffer_start() {
- ob_start("prefix_output_callback");
- }
- add_action('shutdown', 'prefix_output_buffer_end');
- function prefix_output_buffer_end() {
- ob_end_flush();
- }
- function prefix_output_callback($buffer) {
- return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%", '', $buffer );
- }
代码可以从此处下载,链接: pan.baidu.com/s/1yG1GXJ-fFTzcjTIPAPHxjg 提取码: z9eg
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
解释:ob是output buffering的简称。PHP输出内容的时候,会保存在一个由PHP维护的内存里,称为 buffer(缓存)。当这个 buffer 满了,PHP就会自动往 web server 发送这些数据。