我尝试使用插件来实现此目的,例如DNUI和Cleanup Images,但是这些插件不起作用,或者在DNUI的情况下(该插件最近已更新并且可以工作)无法获得我想要的确切结果。这是因为我的网站使用了Woocommerce和一个主题,它们都在其他地方使用图像,而不仅是帖子或页面(例如页眉,页脚和画廊)。似乎WC使用了它自己的内置Lightbox插件,称为Pretty Photo,在该插件中调用了DNUI详细描述为“未使用”的图像。
我知道这有点像问,但我想知道是否有人可以指出我正确的方向?我不是开发人员,所以也许甚至都不应该在这里发布信息,但是我可以花时间和决心来解决问题。我在该站点上看到的脚本可以达到与DNUI插件相同的结果,但是没有考虑其他图像使用的脚本(如果可能的话)。任何帮助将不胜感激。
#1 楼
使用插件删除图像:您可以使用此插件,它将搜索您的数据库并查看图像是否插入到任何帖子中(内容,特色图片,任何自定义字段,任何地方... )或作为背景...
如果未在任何地方使用图片,则可以选择删除它。
您将获得站点上不再使用的所有图片的列表,因此您可以安全地删除它们。
https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/
它仍然可以正常使用,甚至它已经过时了
https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/
手动删除图像:
您还可以在媒体库中搜索未附加到帖子和页面上的图像。
转到媒体库并单击“未附加”,它将显示所有可能显示在其他页面上的图像。网站的一部分或未使用。
评论
未附加到任何帖子的图像的问题在于它们可能会在其他地方使用-例如,如果您有一个自定义字段,该字段使用基于Wordpress本地媒体上传器的图像上传器,具体取决于主题的使用方式编码后,上传到该处的图像未附加到任何帖子(在您的数据库中)。仍然是一个有效的想法。
–布鲁诺·蒙泰罗(Bruno Monteiro)
15年6月18日在13:20
我在这里第二个@BrunoMonteiro。完全有可能没有附在帖子上的图像。
– BODA82
2015年10月11日,下午1:46
#2 楼
Cron /计划任务和数据库爬网是您的朋友它需要是一个插件,您甚至可以为其分配一个wp_cron间隔,与上面建议的间隔没有太大不同,但是还要添加检查任何内容图像的URI / URL的“ post_content”字段(取决于您的WP环境,您将需要标识这些字段)。这有可能会非常耗时/增加系统进程的负担-实际上,假设没有其他法律/业务原因要更频繁地运行,则该进程每天或每周只需要运行一次。
源的主从数据库配置允许此过程显着减少性能损失,但这超出了我认为的范围。
#3 楼
我尝试了Image Cleanup插件,它是最好的,但首先进行备份仍然很好。#4 楼
您需要扫描wp-content/uploads
文件夹中是否有上传的文件,然后在数据库中扫描对这些文件的引用,最后将它们匹配在一起。无法匹配的内容应该可以安全删除。数据库扫描是棘手的部分。大多数文件引用都存储在媒体库中,您可以使用标准WordPress函数/ API对其进行访问。但是,从媒体库中删除但仍被帖子引用的文件会怎样?还是其他插件以不同方式链接的文件?
我做了很多测试,从我收集的数据来看,所有文件引用都以纯文本格式存储(即,仅一个表单元等于HTML格式(即帖子的内容),序列化数据或最终作为JSON对象。您将不得不扫描整个数据库,并尝试猜测每个单元格中使用的格式。当然,某些插件可能会使用其他奇特的方式来保留对其文件的引用,但是只能根据具体情况进行处理。
因此,我写了一个插件自动执行所有操作,因为我在某些客户的网站上需要使用它,并将其命名为Theia Upload Cleaner。它对我来说效果很好,但是当然,在尝试这样的操作之前,您应该始终进行备份。
评论
好的方法...我不知道您是否随着时间的推移添加了越来越多的内容/插件/帖子而遇到任何问题...
– jj_
18年6月13日在8:24
到处都是问题,是的。例如,对于某些插件,您需要排除某些表,否则这些表会大大降低速度。我们确实尝试通过某些关键字自动排除,例如“ log”表,但这当然不能解决所有情况。
– liviucmg
18年6月13日在14:21
#5 楼
Media Cleaner WordPress插件已经足够好-https://wordpress.org/plugins/media-cleaner/我喜欢它,因为它支持其他插件,例如高级自定义字段(ACF),Divi构建器,Visual Composer和Elementor。
评论
我想做同样的事情,但是让我担心的是如何定义未使用的东西。例如,作者可能已将图像上载到草稿帖子,然后创建了另一个草稿帖子,粘贴了内容,然后发布了该帖子。这意味着将图像分配给草稿帖子,而不是已发布的帖子。也许是一个脚本,可以浏览所有帖子并检查图像URL,以查看是否使用了哪些图像。希望我们有一个好的答案。不幸的是,您对“未使用”的定义越详尽,就越不可能找到合适的解决方案。您正在谈论多少张(数量和大小)图像?
嗨,Rarst,感谢您的回答,该网站已经运行了大约5年,并且非常依赖图像,主题和插件进行了许多更改。我相信实际上有数千个未使用的图像。而且由于变化的数量,大小也相差很大。我已经使用了“强制重新生成缩略图”来尝试减少此数目,并且在一定程度上起作用了,但是此插件由于数量而经常超时。如果我将其保持激活状态,也会将服务器上的CPU提升到无法使用的水平。
我意识到问题的复杂性,因此我一直在使用媒体库来尝试查明和删除这些图像。不幸的是,我发现它也经常被列为未使用的物品,反之亦然,因此这是一个艰苦的过程,但是现在我已经开始磨砺了。
如果我花两美分,对于某些类型的网站,我认为可以凭经验解决问题。对于这些网站,网络爬虫正在访问网站上的每个页面。从服务器日志中获取所有已访问页面的URL列表。使用DOMDocument解析这些页面,并获取所有元素及其src。这种方法的问题是Javascript是否动态生成hrefs和srcs。