Come caricare una singola immagine in WordPress senza generare dimensioni multiple
Sto provando a caricare un'immagine in WordPress utilizzando alcune funzioni...
Ho trovato il modo per caricare le immagini ma c'è un problema...
Quando l'utente carica la sua immagine, WordPress crea più versioni dell'immagine con dimensioni diverse, questo è un problema perché voglio solo un'immagine singola..
Questo è il contenuto della cartella wp-content/uploads/2010/10.. guarda l'immagine (questa è una sola immagine ma WordPress crea la stessa immagine con dimensioni diverse).
https://i.sstatic.net/fn6ab.jpg
Questo è il mio codice
<?php /*
Template Name: Pagina di Caricamento
*/?>
<?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">Carica</label>
<input type="file" id="async-upload" name="async-upload"> <input type="submit" value="Carica" 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="Salva tutte le modifiche" 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 del post della pagina File Client
unset($_FILES);
if ( is_wp_error($id) ) {
$errors['upload_error'] = $id;
$id = false;
}
if ($errors) {
echo "<p>Si è verificato un errore durante il caricamento del file.</p>";
} else {
echo "<p>Il tuo file è stato caricato con successo.</p>";
}
}
get_sidebar();
get_footer();?>
Come posso fare in modo che ci sia solo un'immagine?
Spero di essermi spiegato ^* perché la mia lingua ><

Utilizza wp_handle_upload() per gestire autonomamente i caricamenti, senza creare allegati o ridimensionare le immagini.
La funzione media_handle_upload() crea effettivamente un post di tipo allegato, e il processo di ridimensionamento avviene quando viene chiamata wp_generate_attachment_metadata. Se non la chiami, allora non avviene alcun ridimensionamento.

HTML Markup:
<p>
<label for="custom-upload">Carica una nuova immagine:</label>
<input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
</p>
<?php
/*Recupero dell'immagine*/
$attachment = get_post_meta($postid, 'custom_image');
if($attachment[0]!='')
{
echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
}
?>
Caricamento dell'immagine:
<?php
global $post; /*Oggetto post globale*/
$post_id = $post->ID; /*Ottengo l'ID del post corrente*/
$upload = $_FILES['upload']; /*Ricevo l'immagine caricata dal form*/
add_custom_image($post_id, $upload); /*Chiamo la funzione di caricamento immagine*/
function add_custom_image($post_id, $upload)
{
$uploads = wp_upload_dir(); /*Ottengo il percorso della directory di upload di WordPress*/
if (is_writable($uploads['path'])) /*Controllo se la directory è scrivibile*/
{
if ((!empty($upload['tmp_name']))) /*Controllo se l'immagine caricata non è vuota*/
{
if ($upload['tmp_name']) /*Controllo se l'immagine è stata caricata nella directory temporanea*/
{
$file=handle_image_upload($upload); /*Chiamo la nostra funzione personalizzata per EFFETTIVAMENTE caricare l'immagine*/
$attachment = array /*Creo l'allegato per il nostro post*/
(
'post_mime_type' => $file['type'], /*Tipo di allegato*/
'post_parent' => $post_id, /*ID del post*/
);
$aid = wp_insert_attachment($attachment, $file['file'], $post_id); /*Inserisco l'allegato al post e restituisco l'ID dell'allegato*/
$a = wp_generate_attachment_metadata($aid, $file['file'] ); /*Genero i metadati per il nuovo allegato*/
$prev_img = get_post_meta($post_id, 'custom_image'); /*Ottengo l'immagine precedentemente caricata*/
if(is_array($prev_img))
{
if($prev_img[0] != '') /*Se l'immagine esiste*/
{
wp_delete_attachment($prev_img[0]); /*Elimino l'immagine precedente*/
}
}
update_post_meta($post_id, 'custom_image', $aid); /*Salvo l'ID dell'allegato nei metadati*/
if ( !is_wp_error($aid) )
{
wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) ); /*Se non ci sono errori, aggiorno i metadati della nuova immagine caricata*/
}
}
}
else
{
echo 'Per favore carica un\'immagine.';
}
}
}
function handle_image_upload($upload)
{
global $post;
if (file_is_displayable_image( $upload['tmp_name'] )) /*Controllo se è un'immagine*/
{
/*gestisco il file caricato*/
$overrides = array('test_form' => false);
$file=wp_handle_upload($upload, $overrides);
}
return $file;
}
?>

Se stai utilizzando WordPress 3.x, vai su Admin > Impostazioni > Media.
Sotto "Dimensioni immagini", imposta tutti i valori a zero (0) e deseleziona la casella con l'etichetta "Ritaglia miniatura alle dimensioni esatte".
Clicca "Salva modifiche" e WP non creerà più miniature.

+1, stavo per pubblicare la stessa cosa.. (ho passato gli ultimi 5-10 minuti testando upload e dimensioni intermedie)..

il problema persiste ancora .. queste sono le dimensioni predefinite: $default_sizes = array('large', 'medium', 'thumbnail' ); Voglio che le dimensioni predefinite siano 'thumbanil', 'photo_author', 'big_image' .. ecc (photo_author = 20 * 20), (big_image = 600 * 600) ad esempio ..

@AboSami Questa non è la richiesta che avevi fatto nella domanda originale. Avevi detto "wordpress crea più di un'immagine con dimensioni diverse, questo è un problema perché voglio solo un'immagine". Se ora hai bisogno di sapere come AGGIUNGERE dimensioni personalizzate, o rinominare quelle esistenti, questa è una domanda diversa e dovrebbe essere postata separatamente. Ma già che ci siamo - perché ti interessa come sono chiamate internamente? Basta cambiare medium a 20*20, e large a 600*600. Ognuna delle dimensioni standard può essere impostata con qualsiasi larghezza e altezza desideri usando l'amministrazione.
