🎯 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 脚本批量导入多个目录
  • ✅ 上传大量媒体前备份数据库
  • ✅ 可结合自定义字段实现更复杂的图片管理

留下评论

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

Commonly asked questions and answers

Phone:
+1 (555) 000-0000
Email:
info@mysite.com
What does your web design and development process include?
Egestas nullam vehicula, at litora pharetra lacinia. Integer suspendisse condimentum, urna etiam, risus sollicitudin primis varius erat. Donec senectus massa, hendrerit vulputate convallis felis.

Aenean fames risus sodales, viverra accumsan suspendisse, eleifend nunc pharetra hendrerit hac class. Viverra sit vitae dictumst, massa consequat hac, nullam tristique vehicula metus eleifend curabitur. Tellus nostra commodo, et inceptos facilisis neque.

Augue vestibulum netus, neque ante a turpis molestie. Phasellus maecenas, hendrerit varius tristique non. Egestas rutrum ornare augue, suspendisse vehicula pellentesque, dictum ad cubilia nisi lectus duis sodales at. Pretium arcu dictumst, inceptos hendrerit, ad sociosqu pellentesque sollicitudin curabitur curae.

Newsletter subscribe!

Enter your email to unlock an exclusive 10% discount on professional website development tailored to your business needs.

Have more questions?

Let’s schedule a short call to discuss how we can work together and contribute to the success of your project or idea.