Cómo subir una sola imagen sin tamaños adicionales en WordPress
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 ><

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.

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;
}
?>

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.

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

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 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.
