问题描述
由于我们的用户定期上传〜 6MB 的图像以便在网站上使用 (并且不太熟悉如何首先调整大小),WordPress 将原稿存储并将其大小调整为几种不同的大小。
我想要一个使用上传的图像的函数或插件,将其调整到更易于管理的位置,然后替换原始图像。
我看到一些删除原来的功能,但不能替换它,这意味着以后再重新生成缩略图是不可能的。我需要这个替换,所以用户可以上传大图像,并且如果需要,它将被自动调整大小并存储以备日后调整大小。
最佳解决方案
将其添加到主题文件夹中的 functions.php 文件。它用设置中设置的大图像代替原始图像。您可能需要设置新的图像格式,并将其用作新的原始大小。
function replace_uploaded_image($image_data) {
// if there is no large image : return
if (!isset($image_data['sizes']['large'])) return $image_data;
// paths to the uploaded image and the large image
$upload_dir = wp_upload_dir();
$uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
// $large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file']; // ** This only works for new image uploads - fixed for older images below.
$current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
$large_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];
// delete the uploaded image
unlink($uploaded_image_location);
// rename the large image
rename($large_image_location,$uploaded_image_location);
// update image metadata and return them
$image_data['width'] = $image_data['sizes']['large']['width'];
$image_data['height'] = $image_data['sizes']['large']['height'];
unset($image_data['sizes']['large']);
return $image_data;
}
add_filter('wp_generate_attachment_metadata','replace_uploaded_image');
次佳解决方案
上面的解决方案有一个讨厌的 bug 。该解决方案可以作为新图像的魅力,但对于旧图像,您不应该与 $upload_dir['path']
进行比较,因为这是当前上一个月的上传文件夹。
替换以下内容:
//$large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file'];
$large_image_location = $upload_dir['basedir'] . '/'.$image_data['sizes']['large']['path'];
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。