Use wget to find used images

时间:2017-12-15 作者:Pauly

我正在寻找方法来清理一个站点的图像目录,该站点已经被未使用的图像和缩略图超载。是否可以使用wget只下载站点上html页面引用的图像?我注意到可以浏览下载文件夹并查看列出的文件,所以我假设直接的wget-r将下载这些文件。如何使用wget,但不包括对上传目录进行爬网?

1 个回复
SO网友:David Sword

我没有命令行解决方案,但对于PHP,您可以循环浏览所有帖子,构建文件数组,将其与媒体库数组进行比较,找到未使用的内容并删除。

循环浏览帖子

使用get_posts() 对于pages 和或posts, 并构建foreach循环

从帖子中提取媒体,在循环中查找媒体项并构建一个大的已用媒体URL数组

function myplugin_find_media($content) {

    $mediaRegex = "/(src|href)=\\"(.+?).(jpg|png|pdf|gif)\\"/i"; // your support filetypes
    $mediaFind = preg_match_all($mediaRegex, $content, $media);

    if (isset($media[2]) && count($media[2]) > 0)
        return $media[2];

    return false;
}
获取库项目

您可以通过以下方式获取所有库项目

// get the media library for comparison
$library = array();
$args = array(      
    \'post_type\' => \'attachment\',
    //\'post_mime_type\' => \'image\', // if theres only one
    \'numberposts\' => -1,
    \'post_status\' => null,
    \'post_parent\' => null,
);
$attachments = get_posts($args);
foreach ($attachments as $post)
    $library[$post->ID] = wp_get_attachment_url($post->ID); // or add more info about thumbnails, etc
比较库和使用过的媒体项,然后可以循环浏览库并将其与提取的使用过的媒体项进行比较。

注意:您需要考虑缩略图的使用并调整大小-###-### 图像。

在库媒体项不在任何帖子中的情况下删除,并且您将其帖子ID作为$library, 您可以使用wp_delete_post() 将其完全移除。

清理

如果此站点有大量来自不同插件和主题的额外缩略图,这些插件和主题都创建了自己的大小,那么like this 我可以帮你打扫。

更新:看起来已经有一个插件可以做到这一点:https://wordpress.org/plugins/media-cleaner/

结束

相关推荐

WordPress MediaElement-YouTube视频嵌入选项

我有一个自定义字段,将Youtube Url定义为字符串。https://www.youtube.com/watch?v=3VqHtEF3LPE 这将成为我的主题短代码中的src:<?php $ysrc = get_field(\'fl_tube\'); if($ysrc) : $poster = wp_get_attachment_image_src( get_post_thumbnail_id( $entry_id ), \'e