Come caricare una singola immagine in WordPress senza generare dimensioni multiple

20 dic 2010, 17:25:50
Visualizzazioni: 13.5K
Voti: 3

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

3
Commenti

Qual è il problema con le miniature? Tecnicamente è quello che hai chiesto, ma potrebbe avere troppi effetti collaterali, quindi ho pensato di chiedere prima :)

hakre hakre
20 dic 2010 18:47:37

Il problema è che quando carico un'immagine (una sola immagine), WordPress ne crea più di 4 con dimensioni diverse... Non ne ho bisogno. COME posso disattivare questa funzione? Grazie ^_^

AboSami AboSami
21 dic 2010 21:17:25

AboSami, se dovessi tornare qui (visto il 25 dic '11 :), per favore seleziona una delle ottime risposte che ti hanno dato alla tua domanda (decisione difficile!)...

brasofilo brasofilo
7 lug 2012 10:57:19
Tutte le risposte alla domanda 4
0

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.

30 mar 2011 00:16:48
0

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;
}
?>
29 mar 2011 15:13:20
4

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.

20 dic 2010 20:22:01
Commenti

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

t31os t31os
20 dic 2010 21:04:01

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 AboSami
21 dic 2010 22:06:07

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

MathSmath MathSmath
21 dic 2010 23:14:14

Mi dispiace perché la mia domanda non è chiara .. Ho bisogno di ridurre le dimensioni predefinite, ci sono tre tipi (large, medium, thumbnail) e voglio rimuovere 'large' e 'medium'. Inoltre voglio aggiungere solo 'big-picture'. COME? grazie mr MATHSMATH

AboSami AboSami
22 dic 2010 07:28:28
0

Per evitare che WordPress crei multiple immagini per le miniature durante il caricamento, utilizzo questo codice:

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