»

如何清除本地化函数wp_localize_script()所生成的type=“text/javascript)”属性

    WordPress  
CDN的问题访客web.config访问windows主机WordPress插件网站优化前端htaccess数据库查询WP Rocket重定向浏览器身份认证IISApache防盗链CLBWp Super Cache插件cookiesSEOwordpress腾讯云加速

在 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() 函数,问题就可以解决了。

代码如下:

  1. //清除文章中的 type=“text/javascript”和 type=“text/css”  
  2. add_action('wp_loaded', 'prefix_output_buffer_start');  
  3. function prefix_output_buffer_start() {  
  4.     ob_start("prefix_output_callback");  
  5. }  
  6. add_action('shutdown', 'prefix_output_buffer_end');  
  7. function prefix_output_buffer_end() {  
  8.     ob_end_flush();  
  9. }  
  10. function prefix_output_callback($buffer) {  
  11.     return preg_replace( "%[ ]type=[\'\"]text\/(javascript|css)[\'\"]%"''$buffer );  
  12. }  

代码可以从此处下载,链接: pan.baidu.com/s/1yG1GXJ-fFTzcjTIPAPHxjg 提取码: z9eg

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

解释:ob是output buffering的简称。PHP输出内容的时候,会保存在一个由PHP维护的内存里,称为 buffer(缓存)。当这个 buffer 满了,PHP就会自动往 web server 发送这些数据。

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 1135字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →