如何从上传目录中删除所有未使用的图像?


20

我正在尝试清理我的上载文件夹,因为它们现在开始占用服务器上的太多空间。

我尝试使用插件来实现此目的,例如DNUI和Cleanup Images,但是这些插件不起作用,或者在DNUI的情况下(最近已更新并可以正常使用)无法达到我想要的确切结果。这是因为我的网站使用了Woocommerce和一个主题,它们都在其他地方使用图像,而不仅仅是帖子或页面(如页眉,页脚和画廊)。似乎WC使用了它自己的内置的Lightbox插件(称为Pretty Photo),从那里调用了DNUI详细描述为“未使用”的图像。

我知道这是一个问题,但是我想知道是否有人可以指出我正确的方向?我不是开发人员,所以可能甚至都不应该在这里发布信息,但是我可以花时间和决心来解决问题。我在该站点上看到过脚本,其效果与DNUI插件相同,但没有考虑到其他图像用途(即使有可能的话)。任何帮助将非常感激。


2
我想做同样的事情,但是让我担心的是如何定义未使用的。例如,作者可能已将图像上载到草稿帖子,然后创建了另一个草稿帖子,粘贴了内容,然后发布了该帖子。这意味着将图像分配给草稿帖子,而不是已发布的帖子。也许是一个脚本,可以浏览所有帖子并检查图像URL,以查看是否使用了哪些图像。希望我们有一个好的答案。
克里斯汀·库珀

不幸的是,您对“未使用”的定义越详尽,就越不可能找到合适的解决方案。您正在谈论多少(数量和大小)图像?
腊斯特2014年

嗨,Rarst,谢谢您的回答,该网站已经活跃了大约5年,并且非常依赖图像,主题和插件进行了很多更改。我相信实际上有数千个未使用的图像。而且由于变化的数量,大小也相差很大。我已经使用了“强制重新生成缩略图”来尝试减少此数目,并且在一定程度上起作用了,但是由于数量的缘故,此插件经常超时。如果我将其保持激活状态,也会将服务器上的CPU提升到无法使用的水平。
2014年

我意识到问题的复杂性,因此我一直在使用媒体库来尝试查明和删除这些图像。不幸的是,我发现它也经常被列为未使用的物品,反之亦然,因此这是一个艰苦的过程,但是现在我已经开始磨砺了。
2014年

1
如果我花两美分,对于某些类型的网站,我认为可以凭经验解决问题。对于这些网站,网络爬虫正在访问网站上的每个页面。从服务器日志中获取所有已访问页面的URL列表。使用DOMDocument解析这些页面,并获取所有<img>元素及其src。这种方法的问题是Javascript是否动态生成hrefs和srcs。

Answers:


4

使用插件删除图像:

您可以使用此插件,它将搜索您的数据库并查看是否将图像插入到任何帖子中(内容,特色图片,任何自定义字段,任何地方...)或背景...

如果图像未在任何地方使用,它将为您提供删除图像的选项。您将获得站点上不再使用的所有图像的列表,因此可以安全地删除它们。

https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/

而且,即使已经过时,它仍然可以使用

https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/


手动删除图像:

您还可以在媒体库中搜索未附加到帖子和页面的图像。

转到媒体库,然后单击“未附加”,它将显示所有图像,这些图像可能显示在您网站的其他部分,或者未使用。


1
未附加到任何帖子的图像的问题在于它们可能会在其他地方使用-例如,如果您有一个自定义字段,该字段使用基于Wordpress的本机媒体上传器的图像上传器,具体取决于主题的使用方式编码后,上传到该处的图像未附加到任何帖子(在您的数据库中)。仍然是一个有效的想法。
布鲁诺·蒙泰罗

我将在这里第二个@BrunoMonteiro。完全有可能没有附在帖子上的图像。
BODA82

3

Cron /计划任务和数据库爬网是您的朋友

它需要是一个插件,您甚至可以为其分配一个wp_cron间隔,与上面建议的间隔几乎没有什么不同,但是还要添加检查任何“ post_content”之类的字段(您将需要识别它们,具体取决于您的WP环境)图片的URI / URL。这有可能会非常耗时/增加系统进程的负担-实际上,假设没有其他法律/业务原因需要更频繁地运行,则该进程每天或每周只需要运行一次。

源的主从数据库配置允许此过程显着减少性能损失,但这超出了我认为的范围。



1

您需要扫描wp-content/uploads文件夹中的上载文件,然后在数据库中扫描对这些文件的引用,最后将它们匹配在一起。无法匹配的内容应安全删除。

数据库扫描是棘手的部分。大多数文件引用都存储在媒体库中,您可以使用标准WordPress函数/ API对其进行访问。但是,从媒体库中删除但仍被帖子引用的文件会怎样?还是其他插件链接到文件的方式不同?

我进行了大量测试,从我收集的数据来看,所有文件引用都以纯文本格式(即,等于文件路径或URL的表格单元格),HTML格式(即帖子内容)存储,作为序列化数据,或最终作为JSON对象。您将不得不扫描整个数据库,并尝试猜测每个单元格中使用的格式。当然,某些插件可能会使用其他奇特的方式来保留对其文件的引用,但是只能根据具体情况进行处理。

因此,由于我在某些客户的网站上需要它,因此我编写了一个自动完成所有操作的插件,并将其命名为Theia Upload Cleaner。它对我来说效果很好,但是当然,在尝试这样的操作之前,您应该始终进行备份。


好的方法...我不知道您是否随着时间的推移添加了越来越多的内容/插件/帖子而遇到任何问题...
jj_

到处都是问题,是的。例如,对于某些插件,您需要排除某些表,否则它们可能会大大降低速度。我们确实尝试通过某些关键字自动排除,例如“ log”表,但这当然不能解决所有情况。
liviucmg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.