WordPress子目录部署后脚本样式版本号函数路径适配问题
问题根源
- 你的WordPress内核迁移到
kernel子目录后,wp_styles()->base_url/wp_scripts()->base_url取到的是内核所在目录的URL(即带/kernel后缀的站点地址),原代码的判断逻辑strpos($src, $baseUrl) === 0会直接过滤掉所有/content目录下的资源,这部分资源根本不会进入版本号计算逻辑 - 就算进入逻辑,
ABSPATH常量指向的是kernel子目录的本地绝对路径,拼接路径后会得到类似站点根目录/kernel/content/xxx.css的错误路径,自然无法读取到文件修改时间
修复方案
直接替换原有代码为以下版本即可:
function put_modified_time_version($src){ // 只处理本站点的资源,排除外部资源 $home_url = home_url(); if ($src && strpos($src, $home_url) === 0) { $newSrc = remove_query_arg('ver', $src); // 提取URL中的路径部分(相对于站点根目录) $path = wp_parse_url($newSrc, PHP_URL_PATH); // 用站点根目录的绝对路径拼接文件本地路径 $local_path = untrailingslashit($_SERVER['DOCUMENT_ROOT']) . $path; if (file_exists($local_path) && $mtime = filemtime($local_path)) { $src = add_query_arg('ver', $mtime, $newSrc); } } return $src; } add_filter('style_loader_src', 'put_modified_time_version', 15, 1); add_filter('script_loader_src', 'put_modified_time_version', 15, 1);
修改点说明
- 移除了原代码中多余的
baseUrl参数,改用站点首页地址home_url()作为判断依据,所有本站点的资源(不管是kernel还是content目录)都能进入处理逻辑 - 路径拼接改用
$_SERVER['DOCUMENT_ROOT'](站点根目录的本地绝对路径),不再使用指向内核子目录的ABSPATH,保证两类资源的本地路径都能正确匹配 - 增加了
file_exists判断,避免无效路径触发不必要的PHP warning,同时去掉了错误抑制符@
内容的提问来源于stack exchange,提问作者Epifan
相关产品推荐
相关产品推荐

