登录正常未登录时Testimonial轮播失效,控制台报Select2函数错误
登录状态下访问首页,Testimonial轮播功能正常;未登录访问时轮播失效,控制台抛出以下错误:
Uncaught TypeError: $j(...).select2 is not a function
at initSelect2 (woocommerce.min.js:1:108)
at HTMLDocument.(woocommerce.min.js:1:7710)
at e (jquery.min.js:2:27028)
at t (jquery.min.js:2:27330)
jQuery.Deferred exception: $j(...).select2 is not a function TypeError: $j(...).select2 is not a function
at initSelect2 (wp-content/cache/w3-cache/js/13/wp-content/themes/bridge/js/woocommerce.min.js:1:108)
at HTMLDocument.(wp-content/cache/w3-cache/js/13/wp-content/themes/bridge/js/woocommerce.min.js:1:7710)
at e (c0.wp.com/c/6.5.5/wp-includes/js/jquery/jquery.min.js:2:27028)
at t (c0.wp.com/c/6.5.5/wp-includes/js/jquery/jquery.min.js:2:27330) undefined
已尝试禁用缓存,问题仍存在,该功能此前可正常运行。
1. 强制全局加载Select2脚本
未登录状态下Select2库未被加载是核心原因,可通过主题的functions.php添加代码,强制在所有页面加载Select2:
function enqueue_select2_globally() { // 注册并加载Select2脚本,依赖jQuery wp_enqueue_script('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js', array('jquery'), '4.0.13', true); // 加载Select2样式 wp_enqueue_style('select2-css', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css', array(), '4.0.13'); } add_action('wp_enqueue_scripts', 'enqueue_select2_globally');
2. 排查条件加载逻辑
Bridge主题或WooCommerce相关插件可能设置了仅登录用户加载Select2的规则:
- 暂时禁用所有WooCommerce扩展插件,逐一排查是否是某个插件导致的资源加载差异;
- 检查主题的
functions.php或自定义设置面板,看是否有针对登录状态的资源开关。
3. 修正jQuery别名冲突
主题使用了$j作为jQuery别名,但Select2初始化时可能未正确适配:
- 若能修改主题源文件,找到
woocommerce.js中的initSelect2函数,确保调用Select2时使用$j而非$; - 若无法修改源文件,可添加自定义JS代码覆盖初始化逻辑:
jQuery(document).ready(function($j) { // 重新初始化所有Select2元素 $j('select.select2').select2(); });
4. 调整脚本加载顺序
确保Select2在woocommerce.min.js之前加载,避免依赖报错:
- 检查主题中
wp_enqueue_script的调用,确认Select2的加载优先级高于WooCommerce相关脚本; - 若使用缓存插件,清除缓存后重新生成资源组合。
内容的提问来源于stack exchange,提问作者Ashish

