是啊,我们曾经发生过类似的事情。我们的一位高级开发人员和我的老师Tahmina Akter女士为我们编写了以下代码。虽然它太粗糙了,也有一些不推荐使用的PHP函数(我修复了它们并更新了代码),但它还是可以工作的。
CAUTION: Handle it with PROPER CARE, 因为它是DEVASTATING.
代码的工作原理:
由于它是一个页面模板,请将文件放在主题中,添加新页面,然后在此处选择模板进行更改$_DELETE_IMAGES = false;
到true
触发代码
$filename = $up_dir[\'basedir\'] . \'/2013/12/\';
在这里,提及您的/uploads/
目录中,您要从中删除一组图像,因为WordPress以通用格式存储所有图像大小,如:filename-WxH.ext
, 因此,我们以宽度参数为目标,忽略高度部分,并说if ( preg_match( \'/\\.(jpg|png|jpeg|gif)$/\', $file ) )
: <匹配连字符和我们提到的宽度,高度可以是任何值,然后继续下一步,现在打开WordPress页面一次,代码将被执行,其余代码将从/uploads/YYYY/MM/
目录每次重新加载都将执行一次代码。因此,我们希望每次执行都会删除所有图像束,但如果直到有其他不必要的图像大小,您可以转到步骤#3,将大小更改为特定大小,然后重新加载页面以运行要删除的代码。
<?php
/**
* Template Name: Remove Image
*/
$_DELETE_IMAGES = false;
if( $_DELETE_IMAGES ) {
$upload_dir = wp_upload_dir();
$target_path = $upload_dir[\'basedir\'] .\'/2018/03/\';
$images = array();
$sized_images = array();
// Grab all the images first (jpg, png, jpeg, gif).
$dir = opendir( $target_path );
while ( $file = readdir( $dir ) ) {
if ( preg_match( \'/\\.(jpg|png|jpeg|gif)$/\', $file ) ) {
$images[] = $file;
}
}
// Keep images only of the defined sizes.
while (sizeof($images) != 0){
$img = array_pop($images);
if ( preg_match("~\\-300x~",$img) || preg_match("~\\-624x~",$img) || preg_match("~\\-570x~",$img) ) {
$sized_images[] = $img;
}
}
// Now iterate thorough grabbed images and delete/unlink() \'em
while ( sizeof($sized_images) != 0 ) {
$target_image = array_pop( $sized_images );
$the_file = $target_path . $target_image;
if ( file_exists($the_file) ) {
unlink($the_file); // delete the file
printf( "File %s has been deleted.<br>", $the_file );
} else {
printf( "File %s cannont be deleted, because it’s not existed.<br>", $the_file );
}
}
} else {
echo \'Deletion of image is currently off\';
}