问题描述

由于我们的用户定期上传〜 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。