Translatepress自动为script标签加defer导致JavaScript失效如何解决?
阻止TranslatePress自动为script标签添加defer属性的解决方案
TranslatePress添加defer的逻辑和你已禁用的「Fix missing dynamic content」「dynamic translation」功能无关,这两个功能仅负责动态内容的翻译适配,不控制script标签属性修改,可通过以下几种方法解决:
方法1:全局禁用TranslatePress的defer添加逻辑
直接使用TranslatePress官方提供的过滤器钩子,清空允许添加defer的script白名单,所有script都不会被自动加defer:
将以下代码添加到当前活跃主题的functions.php文件末尾,或使用自定义代码片段插件导入:
// 完全禁用TranslatePress自动添加defer属性的功能 add_filter( 'trp_allowed_script_atts_to_add_defer', '__return_empty_array' );
方法2:仅排除自定义计算器脚本(更推荐)
如果不想影响TranslatePress的其他性能优化逻辑,可以只把你的计算器JS排除在defer规则外,针对性更强:
add_filter( 'trp_allow_defer_for_script', function( $allow, $script_src, $script_handle ){ // 请将下方的匹配规则替换为你计算器JS的实际特征 // 示例规则:JS路径包含calculator关键词,或注册句柄为custom_calculator if( strpos( $script_src, 'calculator' ) !== false || $script_handle === 'custom_calculator' ){ return false; } return $allow; }, 10, 3 );
方法3:底层强制移除script标签的defer属性
如果上述TranslatePress专属钩子不生效,可以使用WordPress核心的script标签过滤器,强制移除指定脚本的defer属性:
add_filter( 'script_loader_tag', function( $tag, $handle, $src ){ // 匹配你的计算器脚本的注册句柄,也可添加src关键词匹配 if( $handle === 'custom_calculator' ){ // 移除所有形式的defer属性 $tag = str_replace( [' defer ', ' defer="defer" ', " defer='defer' "], ' ', $tag ); } return $tag; }, 999, 3 );
生效验证
添加代码后请清空网站缓存、TranslatePress插件缓存,再访问前端页面检查计算器脚本的defer属性是否已被移除,功能是否正常。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

