Cómo subir una sola imagen sin tamaños adicionales en WordPress

20 dic 2010, 17:25:50
Vistas: 13.5K
Votos: 3

Estoy intentando subir una imagen en WordPress usando algunas funciones...

Encontré la manera de subir imágenes pero hay un problema...

Cuando el usuario sube su imagen, WordPress crea más de una imagen en diferentes tamaños, esto es un problema porque solo quiero una imagen.

Este es el directorio wp-content/uploads/2010/10... mira la imagen (esta es una sola imagen pero WordPress crea la misma imagen en diferentes tamaños).

https://i.sstatic.net/fn6ab.jpg

Este es mi código:

<?php /*
Plantilla: Página de Subida

*/?>

<?php get_header();
?><div class="container_12">
    <div id="content">
    <form id="file-form" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST">
    <p id="async-upload-wrap">
    <label for="async-upload">Subir</label>
    <input type="file" id="async-upload" name="async-upload"> <input type="submit" value="Subir" name="html-upload">
    </p>

    <p>
    <input type="hidden" name="post_id" id="post_id" value="<?php echo '212';?>" />
    <?php wp_nonce_field('client-file-upload'); ?>
    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
    </p>

    <p>
    <input type="submit" value="Guardar cambios" name="save" style="display: none;">
    </p>
    </form>

<?php
if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) {
    require_once(ABSPATH . 'wp-admin/includes/admin.php');
    $id = media_handle_upload('async-upload', 1199); //ID de la página de Archivos del Cliente
    unset($_FILES);
    if ( is_wp_error($id) ) {
        $errors['upload_error'] = $id;
        $id = false;
    }

    if ($errors) {
        echo "<p>Hubo un error al subir tu archivo.</p>";
    } else {
        echo "<p>Tu archivo ha sido subido.</p>";
    }
}

get_sidebar();
get_footer();?>

¿Cómo puedo hacer que sea solo una imagen?

Espero que me entiendan ^* porque mi idioma ><

3
Comentarios

¿Cuál es el problema con las miniaturas? Técnicamente es lo que pides, pero esto podría tener demasiados efectos secundarios, así que pensé en preguntar primero :)

hakre hakre
20 dic 2010 18:47:37

El problema es que cuando subo una imagen (una sola imagen), WordPress crea más de 4 imágenes con diferentes tamaños... No las necesito. ¿CÓMO puedo desactivar esta función? Gracias ^_^

AboSami AboSami
21 dic 2010 21:17:25

AboSami, si por casualidad vuelves aquí (visto el 25 de diciembre del '11 :), por favor selecciona una de las excelentes respuestas que la gente dio a tu pregunta (¡decisión difícil!)...

brasofilo brasofilo
7 jul 2012 10:57:19
Todas las respuestas a la pregunta 4
0

Utiliza wp_handle_upload() para manejar las subidas de archivos manualmente, sin crear adjuntos o redimensionar.

La función media_handle_upload() en realidad crea una entrada de adjunto, y el proceso de redimensionado ocurre cuando se llama a wp_generate_attachment_metadata. Si no llamas a esa función, entonces no ocurrirá ningún redimensionado.

30 mar 2011 00:16:48
0

Marcado HTML:

<p>
  <label for="custom-upload">Subir nueva imagen:</label>

  <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
</p>
<?php
  /*Obteniendo la imagen*/
  $attachment = get_post_meta($postid, 'custom_image');

  if($attachment[0]!='')
  {
   echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
  }
?>

Subiendo la imagen:

<?php
global $post; /*Objeto global de post*/

$post_id = $post->ID; /*Obteniendo el ID del post actual*/
$upload = $_FILES['upload']; /*Recibiendo la imagen subida desde el formulario*/
add_custom_image($post_id, $upload); /*Llamando a la función de subida de imagen*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Obteniendo la ruta del directorio de subidas de WordPress*/

 if (is_writable($uploads['path']))  /*Verificando si el directorio de subidas es escribible*/
 {
  if ((!empty($upload['tmp_name'])))  /*Verificando si la imagen subida no está vacía*/
  {
   if ($upload['tmp_name'])   /*Verificando si la imagen ha sido subida al directorio temporal*/
   {
    $file=handle_image_upload($upload); /*Llamando a nuestra función personalizada para SUBIR REALMENTE la imagen*/

    $attachment = array  /*Creando adjunto para nuestro post*/
    (
      'post_mime_type' => $file['type'],  /*Tipo de adjunto*/
      'post_parent' => $post_id,  /*ID del post*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Insertando adjunto del post y devolviendo el ID del adjunto*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generando metadatos para el nuevo adjunto*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Obteniendo la imagen previamente subida*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*Si la imagen existe*/
     {
      wp_delete_attachment($prev_img[0]);  /*Eliminando la imagen anterior*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Guardando el ID del adjunto en los metadatos*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*Si no hay error, actualizando los metadatos de la imagen recién subida*/
    }
   }
  }
  else
  {
   echo 'Por favor, sube la imagen.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Verificando si es una imagen*/
        {
    /*manejando el archivo subido*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
29 mar 2011 15:13:20
4

Si estás usando WordPress 3.x, ve a Admin > Ajustes > Medios.

En "Tamaños de imagen", establece todos los valores a cero (0), y desmarca la casilla etiquetada "Recortar la miniatura a las dimensiones exactas".

Haz clic en "Guardar cambios" y WordPress dejará de crear miniaturas.

20 dic 2010 20:22:01
Comentarios

+1, estaba a punto de publicar exactamente lo mismo.. (pasé los últimos 5-10 minutos probando subidas y tamaños intermedios)..

t31os t31os
20 dic 2010 21:04:01

el problema aún existe .. estos son los tamaños por defecto: $default_sizes = array('large', 'medium', 'thumbnail' ); Quiero que los tamaños por defecto sean 'thumbnail', 'photo_author', 'big_image'.. etc (photo_author = 20 * 20 ), (big_image = 600 * 600 ) por ejemplo ..

AboSami AboSami
21 dic 2010 22:06:07

@AboSami Esto no es lo que preguntaste en tu pregunta original. Dijiste "wordpress crea más de una imagen en diferentes tamaños, esto es un problema porque quiero solo una imagen". Si ahora necesitas saber cómo AÑADIR tamaños personalizados, o renombrar los tamaños existentes, esa es una pregunta diferente y debería publicarse por separado. Pero ya que estamos en el tema--¿por qué te importa cómo se llaman internamente? Simplemente cambia medium a 20*20, y large a 600*600. Cualquiera de los tamaños estándar puede configurarse al ancho y alto que quieras usando el admin.

MathSmath MathSmath
21 dic 2010 23:14:14

Lamento que mi pregunta no haya sido clara... Necesito reducir los tamaños predeterminados, hay tres tipos (large, medium, thumbnail). Quiero eliminar 'large' y 'medium'. También quiero agregar solo 'big-picture'. ¿CÓMO? Gracias señor MATHSMATH

AboSami AboSami
22 dic 2010 07:28:28
0

Para evitar que WordPress cree múltiples imágenes para miniaturas al subirlas, estoy usando este código:

add_filter('intermediate_image_sizes_advanced', 'no_image_resizing');
    function no_image_resizing($size) {
        $ret = array();
        return $ret;
    }
24 may 2011 06:18:15