我没有命令行解决方案,但对于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/