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

WordPress WooCommerce前端wp-util先于underscore加载致加购错误如何解决

修复方案

你之前的代码无效是因为优先级设置为0太早,后续主题、插件的脚本注册逻辑会覆盖你的配置,未登录状态下没有管理员栏脚本提前加载underscore,才会出现依赖缺失错误,管理员登录正常就是因为管理员栏相关脚本强制加载了underscore。
直接将以下代码加入子主题functions.php即可:

// 修正wp-util依赖,强制先加载underscore
add_action( 'wp_enqueue_scripts', function() {
    // 等待所有脚本注册完成后修改wp-util的依赖配置
    if ( wp_script_is( 'wp-util', 'registered' ) ) {
        $wp_util_script = wp_scripts()->query( 'wp-util' );
        // 避免重复添加依赖
        if ( ! in_array( 'underscore', $wp_util_script->deps, true ) ) {
            $wp_util_script->deps[] = 'underscore';
        }
    }
    // 强制入队underscore,防止被意外出队
    wp_enqueue_script( 'underscore' );
}, 9999 ); // 高优先级保证最后执行,不被其他逻辑覆盖

这个方案会直接修改wp-util的内置依赖配置,WordPress会自动保证依赖的脚本先加载,不需要手动调整顺序。

脚本入队顺序调试方法
  • 前端快速验证:未登录状态下打开产品页,右键查看网页源代码,分别搜索underscore.min.js和wp-util.min.js,看两个脚本的出现顺序,underscore出现位置更早即为正常。
  • 后端打印队列验证:临时添加以下代码到子主题functions.php,未登录状态下访问页面即可看到脚本加载顺序,调试完成后记得删除:
add_action( 'wp_enqueue_scripts', function() {
    // 仅管理员可见调试信息
    if ( current_user_can( 'manage_options' ) ) {
        $script_list = wp_scripts()->done;
        $underscore_pos = array_search( 'underscore', $script_list );
        echo '<pre>调试:underscore前后加载的脚本列表';
        // 打印underscore前后各5个脚本,确认wp-util位置
        print_r( array_slice( $script_list, $underscore_pos > 5 ? $underscore_pos -5 : 0, 10 ) );
        echo '</pre>';
    }
}, 99999 );
兜底兼容方案

如果上面的方法仍然无效,说明存在代码强制提前输出wp-util脚本,可直接在页面头部最前打印underscore脚本:

add_action( 'wp_head', function() {
    if ( ! is_user_logged_in() ) {
        wp_print_scripts( 'underscore' );
    }
}, 1 );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:03:03