WooCommerce报错:无法找到wp-admin-scripts资源注册表求助
问题描述
仅保留WooCommerce插件、禁用其余所有插件后,网站触发致命错误,报错为:未捕获异常“Could not find asset registry for wp-admin-scripts”,触发位置在/wp-content/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php第128行,完整堆栈跟踪如下:
Fatal error: Uncaught Exception: Could not find asset registry for wp-admin-scripts in /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-content/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php:128 Stack trace: #0 /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-content/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php(401): Automattic\WooCommerce\Internal\Admin\WCAdminAssets::get_script_asset_filename('wp-admin-script...', 'product-trackin...') #1 /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-content/plugins/woocommerce/includes/tracks/events/class-wc-products-tracking.php(355): Automattic\WooCommerce\Internal\Admin\WCAdminAssets::register_script('wp-admin-script...', 'product-trackin...', false) #2 /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-includes/class-wp-hook.php(308): WC_Products_Tracking->possibly_add_product_tracking_scripts('edit.php') #3 /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-includes/class-wp-hook.php(332): W in /data/web/virtuals/298612/virtual/www/domains/miltexshop.cz/wp-content/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php on line 128
相关代码分析
报错来自WCAdminAssets.php中的get_script_asset_filename函数,该函数负责查找脚本的asset注册文件,代码如下:
/** * Gets a script asset registry filename. The asset registry lists dependencies for the given script. * * @param string $script_path_name Path to where the script asset registry is contained. * @param string $file File name (without extension). * @return string complete asset filename. * * @throws \Exception Throws an exception when a readable asset registry file cannot be found. */ public static function get_script_asset_filename( $script_path_name, $file ) { $minification_supported = Features::exists( 'minified-js' ); $script_min_filename = $file . '.min.asset.php'; $script_nonmin_filename = $file . '.asset.php'; $script_asset_path = WC_ADMIN_ABSPATH . WC_ADMIN_DIST_JS_FOLDER . $script_path_name . '/'; // Check minification is supported first, to avoid multiple is_readable checks when minification is // not supported. if ( $minification_supported && is_readable( $script_asset_path . $script_min_filename ) ) { return $script_min_filename; } elseif ( is_readable( $script_asset_path . $script_nonmin_filename ) ) { return $script_nonmin_filename; } else { // could not find an asset file, throw an error. throw new \Exception( 'Could not find asset registry for ' . $script_path_name ); } }
从代码逻辑看,函数尝试读取wp-admin-scripts目录下的product-tracking.min.asset.php或product-tracking.asset.php文件,若两者都找不到或无法读取,就会抛出错误。
无需重装的修复思路
检查目标文件是否存在
登录服务器,导航到wp-content/plugins/woocommerce/packages/woocommerce-admin/dist/js/wp-admin-scripts/目录,确认product-tracking.asset.php和product-tracking.min.asset.php是否存在。如果缺失,从官方WooCommerce对应版本的安装包中提取这两个文件,上传到该目录。修复目录与文件权限
将wp-admin-scripts目录权限设置为755,目录内所有文件权限设置为644,确保WooCommerce能正常读取这些文件。临时禁用产品跟踪功能
若无法立即修复文件,可通过代码临时绕过错误:在当前主题的functions.php末尾添加以下代码:add_filter( 'woocommerce_products_tracking_enabled', '__return_false' );保存后刷新后台,验证是否能正常访问,后续再补全缺失文件。
验证版本兼容性
确认当前WordPress版本与WooCommerce版本是否兼容,若版本不匹配导致文件结构异常,可升级或降级到兼容版本(直接覆盖对应版本的WooCommerce文件即可,无需重装)。
内容的提问来源于stack exchange,提问作者Pe Tr

