满足以下两个需求,我们需要哪些操作?
- 使用独立图片域名/CDN
- 自定义文件存储结构
第一步:解析图片独立域名到根目录中images
假设我们要将重写的图片上传目录都集中在images中。在你的网站根目录中创建images文件夹。
你的专门的图片域名为img.***.com,将该域名解析并绑定到网站根目录的images文件夹。
第二步:将实现代码放入你的插件中
代码:
if ( ! function_exists( 'your_revise_upload_dir' ) ) :
function your_revise_upload_dir($upload) {
$site_url = get_home_url(get_main_site_id());
$site_url = str_replace('www', 'img', $site_url);
$site_id = get_current_blog_id();
$custom_dir = '/images';
$relpath = ABSPATH;
$imgbase_path = $relpath. $custom_dir.'/sites'.$site_id;
if ( ! file_exists( $imgbase_path ) ) {
wp_mkdir_p( $imgbase_path ); //如果这些目录不存在,则进行创建
}
$upload['path'] = $imgbase_path.$upload['subdir'];
$upload['url'] = $site_url . $custom_dir.'/sites'.$site_id.$upload['subdir'];
// $upload['subdir'] = $custom_dir;
$upload['basedir'] = $imgbase_path;
$upload['baseurl'] = $site_url . $custom_dir.'/sites'.$site_id;
return $upload;
}
endif;
add_filter('upload_dir', 'your_revise_upload_dir');这个函数通过修改 WordPress 的 upload_dir 过滤器,将媒体文件上传到自定义的目录结构,而不是默认的 wp-content/uploads 目录。
1. 函数定义和存在性检查
if ( ! function_exists( 'your_revise_upload_dir' ) ) :
function your_revise_upload_dir($upload) {- 防止函数重复定义
$upload参数包含 WordPress 默认的上传目录设置
2. 获取站点信息
$site_url = get_home_url(get_main_site_id());
$site_url = str_replace('www', 'img', $site_url);
$site_id = get_current_blog_id();- 获取主站点的首页 URL
- 将 URL 中的 “www” 替换为 “img”(可能是为了使用 CDN 或专门的图片域名)
- 获取当前站点的 ID(支持多站点)
3. 设置自定义目录
$custom_dir = '/images';
$relpath = ABSPATH;
$imgbase_path = $relpath. $custom_dir.'/sites'.$site_id;- 定义自定义目录为
/images - 构建完整的物理路径:
网站根目录/images/sites{站点ID}
4. 创建目录
if ( ! file_exists( $imgbase_path ) ) {
wp_mkdir_p( $imgbase_path );
}- 如果目标目录不存在,自动创建(包括所有父级目录)
5. 修改上传路径配置
$upload['path'] = $imgbase_path.$upload['subdir'];
$upload['url'] = $site_url . $custom_dir.'/sites'.$site_id.$upload['subdir'];
$upload['basedir'] = $imgbase_path;
$upload['baseurl'] = $site_url . $custom_dir.'/sites'.$site_id;修改了四个关键参数:
path: 物理路径url: 访问 URLbasedir: 基础物理路径baseurl: 基础 URL
6. 挂载过滤器
add_filter('upload_dir', 'your_revise_upload_dir');将函数挂载到 upload_dir 过滤器上。
最后:启动你的插件
建议整合到你自己的插件中。启动插件测验一下吧!
效果示例
假设:
- 站点 ID: 2
- 域名: www.example.com
- WordPress 安装在: /var/www/html
那么:
- 物理路径:
/var/www/html/images/sites2/2024/01/ - 访问 URL:
http://img.example.com/images/sites2/2024/01/
使用场景
这种配置常用于:
- 多站点网络的媒体文件管理
- 使用独立图片域名/CDN
- 自定义文件存储结构
- 分离静态资源与程序文件
这个实现确保了在多站点环境中每个站点都有独立的媒体存储空间,同时支持按年月自动组织文件。

