WordPress: 媒体图库文件整理 缩略图 重命名
缩略图清理禁用插件:
ThumbPress
媒体注册插件:
手动上传文件至/wp-content/uploads/后,需要注册后,才能在WordPress的媒体库中显示和管理。
可使用插件Media Sync,Add From Server或Bulk Media Register来注册。
更新:Media Sync会造成数据库在phpMyAdmin中,通过SELECT * FROM `wp_posts` WHERE 1;
语句查询出的结果多出很多空行。导出后直接再导入数据库,通过SELECT * FROM `wp_posts` WHERE `post_type` = 'post';
语句查询出的结果行数与导出前不同,暂时没有进一步查找不同行。
目前推荐通过插件Bulk Media Register
来注册。
图片文件重命名插件:
更新:
插件 CoolWP Pinyin Attachment Name(附件名中文改拼音) 会造成多个媒体类插件命名文件名时,文件名与扩展名之间多出一个点。所以需要删除此插件。删除此插件后,Media File Renamer重命名正常。
Media File Renamer
此插件专用于批量重命名,可锁定不需要重命名的文件,可选择只重命名图片类型的文件,需搭配同一作者的Media Cleaner使用。如果重命名后,文件名最后会多一个点,例如10c91cbec1b70835824b898ef16a0de7..png
,需排查其它插件,看看是哪个插件的影响,可能性最大的是和文件名有关的插件,例如文件名字符过滤/拼音自动转换等插件。
其它插件:
WP Sheet Editor插件中的Edit Media可以批量重命名,并且支持的命名规则更多更灵活,可以按Post类型批量重命名,但是,这个插件SQL语句的逻辑似乎有问题,速度很慢,会导致binlog大小快速增长,需要缩小MySQL配置文件中 binlog_expire_logs_seconds
的大小,并且执行到50%左右会中断,难以继续,基本无法使用。
Bulk image resizer插件也可以批量重命名,但是没有任何过滤的选项,会将所有文件都重命名,也可以尝试使用。
去除文件名多出的点:
Advanced Renamer
虽然不影响使用,但是若想去掉多余的点,可以使用Windows下的软件Advanced Renamer,对wp-content\uploads下的文件批量重命名:
重命名方案添加替换字符
,选中使用正则表达式
,应用到选择仅文件名
,替换文本输入 ^([^\.]*?)\.$
,替换为输入 \1
。
在数据库中进行替换
在MariaDB
中,执行
-- 替换文章内容中的图片文件名 update `wp_posts` set `post_content` = REGEXP_REPLACE(`post_content`, '(src="[^\\s]+?\\/[^\\s]+?)\\.(\\.[^\\s]+?")', '\\1\\2'); -- 如果MySQL报错: -- #1139 - Regex error 'match limit exceeded' -- 可修改SQL语句为: update `wp_posts` set `post_content` = REGEXP_REPLACE(`post_content`, '(\\/[^\\s/]+?)\\.(\\.[^\\s/]+?")', '\\1\\2'); -- 替换图库中的图片文件名 update `wp_postmeta` set `meta_value` = REGEXP_REPLACE(`meta_value`, '("[^\\s]+?)\\.(\\.[^\\s]+?")', '\\1\\2'); update `wp_postmeta` set `meta_value` = REGEXP_REPLACE(`meta_value`, '([^\\s]+?)\\.(\\.[^\\s]+)', '\\1\\2');
注意MySQL
不支持反向引用捕获的分组,如果数据库为MySQL,需要导入到MariaDB中,替换完后再导入MySQL。
数据库导入导出使用UpdraftPlus插件,可自动替换域名等,并且不会导致Betheme主题配置重置。
Windows下安装MariaDB可使用XAMPP ,XAMPP 包含 Apache, MariaDB, PHP 和 Perl。
更新:
发现手动进行数据库文件名替换后,插件 WP Sheet Editor - Media Library 报错:
错误信息:Uncaught TypeError: array_merge(): Argument #2 must be of type array, bool given in /home/username/public_html/wp-content/plugins/wp-sheet-editor-media-library-premium/inc/sheet.php:408
DELETE FROM `wp_posts` WHERE `post_type` = 'attachment'; DELETE FROM `wp_postmeta` WHERE `meta_key` = '_wp_attached_file' or `meta_key` = '_wp_attachment_metadata';
但是再次手动进行数据库文件名替换后,仍然会报错,暂未找到原因。
手工图片文件重命名
当图片文件过多时,比如3万个,前面所用插件的速度就显得非常慢了。此时,采用批量重命名软件重命名,然后手工编辑sql文件,速度更快。
1. 使用Advanced Renamer
,批量重命名图片文件。
将wp-content\uploads下需要批量重命名的图片文件夹做好备份,然后拖动到Advanced Renamer的批处理列表中,会弹出添加目录对话框,如果只重命名图片文件,在正则表达式匹配中填写:
^.*?\.((jpg)|(jpeg)|(png)|(gif)|(webp))$
在Advanced Renamer的左则,点击添加批处理方案中的重构文件名。
以新文件名为随机32个字符为例,从下拉列表中选择高级标签,点击<Rand Str>-随机字符串
,将<Rand Str:8>
修改为<Rand Str:32>
,然后点击开始批处理。
完成后:
将完成重命名的图片文件夹替换WordPress下wp-content\uploads下的图片文件夹。
在Advanced Renamer程序文件的目录下,找到UndoLists目录,例如C:\Advanced Renamer x64\Data\UndoLists,此目录下的文件为批量重命名的记录。
按文件的时间可找到需要的文件,用文本编辑器EmEditor打开,去除[header]等内容,只保留类似file000000开头的内容。
file000000=C:\wp-content\uploads\2022\03\1239f1a40e317d2de113e7ca17f52465.jpg|C:\Users\wp-content\uploads\2022\03\mcvbnunskwcmvmtelydtseqnibryrbtd.jpg file000001=C:\wp-content\uploads\2022\03\5e402abc3fedaf8927900f014ccc031e.jpg|C:\Users\wp-content\uploads\2022\03\ycqxxxwhltscwqmtalmppnkaxgwqnkef.jpg file000002=C:\wp-content\uploads\2022\03\a27e3f0172e92acc4ae5edb208992312.jpg|C:\Users\wp-content\uploads\2022\03\xwqyuqiayevdltjhwmepqglkjacoxxgx.jpg
2. 生成EmEditor批处理替换文件:
Ctrl+H
打开EmEditor的替换对话框,勾选正则表达式:
查找:^.*?\\([^\\]*?)\|.*?\\([^\\]*?)\n 替换:on \1 \2 \n
然后另存为以tsv
为扩展名的文本文件。
4. 在数据库文件中进行文件名的替换:
导出WordPress数据库为sql文件,做好备份,然后在EmEditor中打开:
Ctrl+H
打开EmEditor的替换对话框,点击对话框右下角的批处理,点击导入,导入上一步生成的tsv文件。
然后点击多项替换全部(参考:批处理替换全部和多项替换全部之间的区别),完成后保存。
将sql文件导入到WordPress数据库即完成。