WordPress找不到注册文件时如何控制指定插件脚本按需加载
WordPress按页面条件加载Theme My Login脚本方案
问题梳理
需要管控页面加载的两个脚本:
- Theme My Login插件脚本:
<script type="0f1a6d7ca503db410c0d10c4-text/javascript" src='https://www.[-----------].se/wp-content/plugins/theme-my-login/assets/scripts/theme-my-login.min.js?ver=7.1.2' id='theme-my-login-js'></script>
- Guru主题内置脚本:
<script type="0f1a6d7ca503db410c0d10c4-text/javascript" src='https://www. [-----------].se/wp-content/themes/guru/framework/js/public/jquery.smartresize.js?ver=5.5.2' id='jquery-smartresize-js'></script>
目前已通过注释public_html/wp-content/themes/guru/framework/register_public.php中对应入队代码屏蔽第二个脚本,注释代码如下:
/* wp_enqueue_script('jquery-smartresize', $template_uri.'/js/public/jquery.smartresize.js', array(), false, true); */
核心需求:不全局停用Theme My Login插件,仅在特定页面加载该插件的前端脚本,不需要手动定位插件内的入队代码,优先从入队环节直接拦截,避免先注册再移除的冗余逻辑。
实现方案
不需要翻插件源码找入队位置,直接把下面代码加到当前主题/子主题的functions.php文件中即可,通过WordPress原生钩子拦截,插件更新也不会失效。
// 条件控制Theme My Login脚本加载 add_action('wp_enqueue_scripts', 'custom_block_tml_script', 999); function custom_block_tml_script() { $load_tml = false; // 以下为放行条件,按需修改 // 示例1:按页面slug放行,括号内替换为你站点实际需要加载TML的页面别名 if ( is_page(['login', 'register', 'resetpass']) ) { $load_tml = true; } // 示例2:按URL路径放行,需要的话取消注释,替换为实际路径关键词 // if ( str_contains($_SERVER['REQUEST_URI'], '/member/') ) { // $load_tml = true; // } // 非放行页面直接移除脚本注册与入队 if ( !$load_tml ) { wp_dequeue_script('theme-my-login'); wp_deregister_script('theme-my-login'); } }
注意事项
- 钩子优先级设为999,确保执行时机晚于插件的脚本注册逻辑,不会出现拦截失效的问题
- 放行条件可灵活组合:需要按页面ID判断就传页面ID给
is_page(),需要按文章类型判断就加is_singular('post_type')之类的判断逻辑 - 不要直接修改Theme My Login插件内的源码,插件版本更新会覆盖所有修改,用钩子实现的逻辑无后续维护成本
- 之前全局搜索找不到对应入队代码是正常的,该插件的脚本入队逻辑封装在类内部方法中,直接搜
wp_enqueue_script会匹配到大量无关结果,没必要花时间定位。
内容的提问来源于stack exchange,提问作者Mr_G
相关产品推荐
相关产品推荐

