Reemplazar automáticamente la imagen cargada original con un tamaño de imagen grande

11

Como nuestros usuarios cargan regularmente ~ 6 MB de imágenes para usar en el sitio web (y no están muy familiarizados con cómo cambiar su tamaño primero), WordPress almacena los originales y los redimensiona a varios tamaños diferentes.

Me gustaría una función o complemento que tome la imagen cargada, la reduzca a un tamaño más manejable y luego reemplace la original.

He visto algunas funciones que eliminan el original pero no lo reemplazan, lo que significa que es imposible regenerar las miniaturas en una fecha posterior. Necesito que esto sea reemplazado para que el usuario pueda cargar una imagen grande y se reduzca automáticamente su tamaño y se almacene para su posterior cambio de tamaño si es necesario.

    
pregunta Shaun 31.08.2012 - 10:59

3 respuestas

10

Agregue esto al archivo functions.php en la carpeta del tema. Reemplaza la imagen original con la imagen grande establecida en la configuración. Es posible que desee configurar un nuevo formato de imagen y utilizarlo como nuevo tamaño original.

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');
    
respondido por el Paul Phillips 15.10.2012 - 17:58
3

Hay un error desagradable en la solución anterior. La solución funciona como un encanto para las nuevas imágenes, pero para las imágenes antiguas, nunca se debe comparar con $upload_dir['path'] porque esa es la carpeta de carga actual del mes actual.

Reemplaza lo siguiente:

//$large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file'];
$large_image_location = $upload_dir['basedir'] . '/'.$image_data['sizes']['large']['path'];
    
respondido por el timocouckuyt 01.04.2015 - 12:54
2

¿Puedo sugerir una actualización del código de la respuesta anterior? Desafortunadamente, en las versiones más recientes de Wordpress, la clave 'ruta' ya no se proporciona para los tamaños de archivo. Por lo tanto, para que funcione en las subidas de publicaciones anteriores, primero debemos obtener el subdirectorio actual de la imagen original y usarlo para hacer la ruta de ubicación para la imagen grande.

Reemplaza esta línea:

$large_image_location = $upload_dir['basedir'] . '/'.$image_data['sizes']['large']['path'];

por estas 2 líneas:

$current_subdir = substr($image_data['file'],0,strrpos($image_data['file'],"/"));
$large_image_location = $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];
    
respondido por el leendertvb 12.11.2015 - 22:40

Lea otras preguntas en las etiquetas