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

时间:2014-06-10 作者:G-Olly

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

我曾尝试使用插件来实现这一目标,如DNUI和清理图像,但这些插件要么不可行,要么在DNUI的情况下(最近已更新并生效),无法实现我所追求的确切结果。这是因为我的网站使用Woocommerce和一个主题,这两个主题都使用其他地方的图像,而不仅仅是帖子或页面,比如页眉、页脚和图库。WC似乎使用了自己的内置Lightbox插件,名为Pretty Photo,DNUI将从中调用详细显示为“未使用”的图像。

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

5 个回复
SO网友:Advanced SEO

Deleting images using plugin:

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

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

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

这个,仍然有效,即使它已经过时了

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

<人力资源>

Deleting images manually:

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

转到media library并单击“unattached”(未连接),它将显示站点其他部分可能显示或未使用的所有图像。

SO网友:Brandt Solovij

Cron/定时任务和数据库爬网是您的朋友

它需要是一个插件,您甚至可以为其分配一个wp\\u cron间隔,这与上面建议的间隔没有太大区别,但还需要为图像的URI/URL检查任何类似“post\\u content”的字段(您需要根据您的wp环境识别这些字段)。假设没有其他法律/业务原因需要更频繁地运行,这可能会对系统的流程造成极大的时间消耗/负担-实际上,该流程只需要每天或每周运行一次。

source的主从DB配置允许此过程大大减少对性能的损害,但我认为这超出了这个问题的范围。

SO网友:cowboy14

我试过了Image Cleanup 插件,这是最好的,但还是要先备份。

SO网友:liviucmg

你需要扫描你的wp-content/uploads 文件夹用于上载文件,然后是数据库用于引用这些文件,最后将它们匹配在一起。不能匹配的应该可以安全删除。

数据库扫描是一个棘手的部分。大多数文件引用存储在媒体库中,您可以使用标准WordPress函数/API访问该媒体库。但是,从媒体库中删除但仍被帖子引用的文件会发生什么情况?或者其他插件以不同方式链接到的文件?

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

因此,我编写了一个插件,可以自动完成所有这一切,因为我需要它用于一些客户的网站,并将其命名为Theia Upload Cleaner. 这对我来说很有效,但当然你应该在尝试这样的事情之前做一个备份。

SO网友:ciaika

媒体清洁器WordPress插件非常好-https://wordpress.org/plugins/media-cleaner/

我喜欢它,因为它支持其他插件,如高级自定义字段(ACF)、Divi Builder、Visual Composer和Elementor。(仅限付费版本)

结束

相关推荐

如何增加nggallery carousel模板的缩略图大小

我想增加nggallery carousel模板的缩略图大小。检查此链接http://arkamediaworks.com/rel_test/uncatagorize/hello-2/?pid=6是否有更好的代码来执行此操作。以下是代码:<!-- Thumbnail list --> <?php foreach ( $images as $image ) : ?> <?php if ( $image->hidden ) continue; ?>&#