移除Google Recaptcha未使用JavaScript的方案不生效,如何解决?
解决方案
- 第一步:确认recaptcha脚本的正确注册句柄
你之前使用的google-invisible-recaptcha句柄可能和你网站上实际使用的recaptcha插件注册的句柄不匹配,可临时添加以下代码到主题functions.php文件中,访问首页后即可输出所有已排队脚本的句柄,找到包含recaptcha关键词的对应句柄即可:
add_action( 'wp_print_scripts', 'debug_enqueued_scripts' ); function debug_enqueued_scripts() { global $wp_scripts; foreach( $wp_scripts->queue as $handle ) { echo $handle . '<br>'; } }
查到正确句柄后记得删除这段调试代码。
- 第二步:调整注销脚本的钩子优先级
默认的钩子优先级为10,可能晚于或早于recaptcha脚本的注册时机,调整优先级为999确保注销操作在脚本注册后执行,参考代码如下(将代码中的占位符替换为实际信息):
add_action( 'wp_enqueue_scripts', 'mytheme_deregister_recaptcha', 999 ); function mytheme_deregister_recaptcha() { // 仅在不需要展示验证码的页面执行注销,示例为仅在ID为123的联系页加载验证码,其他页面均移除 if( !is_page(123) ) : wp_deregister_script('替换为你查到的正确recaptcha脚本句柄'); // 若存在配套的recaptcha样式文件,也可同步注销 wp_deregister_style('替换为你查到的正确recaptcha样式句柄'); endif; }
- 第三步:处理硬编码插入的recaptcha脚本
如果上述方案依然无效,说明你使用的recaptcha插件没有采用WordPress官方的脚本注册方式加载,而是直接硬编码输出到页面中,可使用缓冲输出替换的方式移除不需要的脚本,参考代码如下:
add_action( 'wp_footer', 'remove_hardcoded_recaptcha', 1 ); function remove_hardcoded_recaptcha() { // 仅在非验证码需要页面执行替换 if( !is_page(123) ) { ob_start(function($html) { return preg_replace('/<script[^>]*recaptcha[^>]*><\/script>/i', '', $html); }); } }
- 注意事项
所有代码修改完成后,需要清空WordPress缓存、CDN缓存、浏览器缓存后再重新使用Page Speed Insights检测,避免缓存导致的结果不准确。
内容的提问来源于stack exchange,提问作者Maria Ines Mc Loughlin
相关产品推荐
相关产品推荐

