...

🎯 WordPress 批量上传图片并按指定时间写入媒体库的完整方法(FTP + WP CLI)

在 WordPress 开发或内容迁移过程中,我们常常需要:

  • 批量上传大量图片
  • 希望图片在媒体库中显示为某个特定年月
  • 按顺序写入媒体库(保持排序一致)
  • 避免服务器反复拷贝文件(节省空间)

默认后台上传无法实现这些高级需求,但借助 FTP + WP CLI + functions.php 定制代码,可以完美实现。


🧩 实现目标

  • ✅ 图片实际文件存在于 /wp-content/uploads/2023/03/
  • ✅ 媒体库中显示“上传于 2023 年 3 月”
  • ✅ 上传时间按照你设定的起点时间,每张图 +10 秒
  • ✅ 媒体库按时间顺序排序展示(非乱序)
  • ✅ 不重复复制图片文件(节省空间)

📦 所需准备工具

工具用途是否必须
FTP / 文件管理器上传图片到服务器
WP-CLI命令行导入媒体
functions.php注入上传目录与时间控制逻辑

🧰 Step 1:上传图片到指定目录

通过 FTP 或主机自带文件管理器:

  • 将图片上传到目录,例如: /wp-content/uploads/2023/03/

注意文件命名统一格式(如 001.jpg、002.jpg),便于后续排序。


🧠 Step 2:在 functions.php 中加入控制代码

在你的主题(如 wp-content/themes/your-theme/functions.php)中加入以下代码:

// 1. 固定上传目录为 /2023/03
add_filter('upload_dir', function ($uploads) {
    $custom_subdir = '/2023/03'; // ← 可自定义为你需要的目录
    $uploads['subdir'] = $custom_subdir;
    $uploads['path'] = $uploads['basedir'] . $custom_subdir;
    $uploads['url'] = $uploads['baseurl'] . $custom_subdir;
    return $uploads;
});

// 2. 设置上传时间从某日起,每张图增加 10 秒
add_filter('wp_insert_attachment_data', function ($data) {
    static $i = 0;
    $base_time = strtotime('2023-03-04 14:00:00'); // 起始时间
    $custom_time = date('Y-m-d H:i:s', $base_time + ($i * 10)); // 每张图 +10秒
    $data['post_date'] = $custom_time;
    $data['post_date_gmt'] = get_gmt_from_date($custom_time);
    $i++;
    return $data;
});

📝 说明:

  • 你可以修改路径 /2023/03 为任意目标年月
  • 起始时间 2023-03-04 14:00:00 也可自定义
  • 每张图递增 10 秒,确保时间唯一,防止排序混乱

💻 Step 3:使用 SSH 进入 WordPress 根目录

登录你的服务器 SSH 后,进入 WordPress 安装目录:

cd /home/你的用户名/domains/你的域名/public_html

确认是否是正确目录:

ls -al | grep wp-config.php

能看到 wp-config.php,说明你就在根目录 ✅


🚀 Step 4:用 WP CLI 导入媒体文件(不复制)

执行以下命令:

wp media import $(ls -1v wp-content/uploads/2023/03/*.{jpg,jpeg,png,gif,webp,svg}) --skip-copy

参数说明:

  • ls -1v:按自然顺序列出文件名(001.jpg → 002.jpg → …)
  • --skip-copy:跳过复制操作,避免浪费磁盘空间
  • wp media import:通过 WP CLI 将文件注册到媒体库

✅ 成功后你将在媒体库看到图片,上传时间按你设定的顺序排列,并显示“上传于 2023 年 3 月”。


📌 注意事项

✅ 避免乱序的关键:

WordPress 后台上传多个文件是并发异步,可能导致 $i++ 紊乱;而 WP CLI 是串行执行,可以确保每张图的时间顺序与文件名一致。


🧪 常见问题解答

❓ 后台上传为什么排序会乱?

后台上传多张图是同时发起多个异步请求,$i++ 无法保证顺序。只能通过 WP CLI 保证顺序导入。


❓ 媒体库只显示 80 张图,怎么办?

媒体库的“网格视图”默认最多只加载前 80 张,可以切换到“列表视图”查看更多,或者使用媒体分页插件。


❓ 如何改成导入到别的月份,比如 2024/08?

只需修改 2 个地方:

  • functions.php 中的:
$custom_subdir = '/2024/08';
$base_time = strtotime('2024-08-01 10:00:00');
  • 上传图片到 /wp-content/uploads/2024/08/

然后执行导入命令:

wp media import $(ls -1v wp-content/uploads/2024/08/*.{jpg,jpeg,png,gif,webp,svg}) --skip-copy

✅ 总结

步骤说明
上传FTP 将图片上传到目标年月的文件夹
控制functions.php 中设置上传目录和上传时间规则
导入用 WP CLI + --skip-copy 将图片写入数据库
效果图片显示为指定年月,排序整齐,避免乱序

🧾 附加建议

  • ✅ 可以写成 Shell 脚本批量导入多个目录
  • ✅ 上传大量媒体前备份数据库
  • ✅ 可结合自定义字段实现更复杂的图片管理

订阅更新

请在下方输入您的电子邮箱地址,订阅我们的新闻通讯。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Seraphinite AcceleratorBannerText_Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.