You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除WordPress插件添加的script与style标签的type属性?

解决WordPress插件脚本/样式标签type属性无法移除的问题

你的现有代码只对主题文件生效,核心原因是:style_loader_tag 和 script_loader_tag 这两个过滤器仅作用于通过WordPress官方脚本/样式加载器(wp_enqueue_style/wp_enqueue_script)注册的资源。而不少插件为了实现快速加载或者兼容旧版本,会直接在模板里硬编码输出 <script> 或 <style> 标签,完全不走WordPress的队列加载流程,所以你的过滤器根本抓不到这些标签。

要解决这个问题,我们可以用全局输出缓冲的方法,直接拦截整个页面的HTML输出,统一移除所有符合条件的type属性——不管是主题还是插件输出的标签,只要出现在最终页面里,都会被处理。

以下是完整的解决方案代码:

// 启动输出缓冲,统一处理页面输出
add_action('wp_loaded', 'codeless_init_output_buffer');
function codeless_init_output_buffer() {
    ob_start('codeless_remove_all_type_attr');
}

// 回调函数:移除所有script和style标签的type属性
function codeless_remove_all_type_attr($output) {
    // 处理type属性在标签开头的情况
    $output = preg_replace('/<script\s+type=["\']text\/javascript["\']/', '<script', $output);
    $output = preg_replace('/<style\s+type=["\']text\/css["\']/', '<style', $output);
    
    // 处理type属性在标签其他位置的情况
    $output = preg_replace('/\s+type=["\']text\/(javascript|css)["\']/', '', $output);
    
    return $output;
}

补充说明:

  • 为什么这个方法有效?
    输出缓冲会把页面生成的所有HTML先暂存到内存里,直到页面全部生成完毕,再通过我们的回调函数对整个HTML内容进行正则替换,覆盖了所有来源的标签输出。
  • 现有代码还能保留吗?
    可以保留,它会继续处理走WordPress队列的资源,和新方法形成互补——不过其实新方法已经覆盖了所有场景,你也可以只保留新代码。
  • 注意事项:
    如果你的网站使用了缓存插件,修改代码后一定要清空缓存才能看到效果;另外,正则表达式已经覆盖了常见的属性写法,比如type属性在标签中的不同位置。

内容的提问来源于stack exchange,提问作者Elichy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:57:16