Inviare post e caricare immagini dal front-end

13 mar 2011, 15:51:50
Visualizzazioni: 49.3K
Voti: 12

Sto cercando di fare qualcosa di simile alla domanda sopra. Sto provando a far pubblicare post e caricare immagini agli utenti dal front-end. Ho già creato il form per i post e funziona.

Ho seguito e provato la risposta pubblicata da Robin I Knight upload-post-thumbnail-from-the-front-end. Purtroppo non sono riuscito a farlo funzionare. C'è qualcosa che dovrei modificare o cambiare?

Grazie.

0
Tutte le risposte alla domanda 2
6
23

Se stai parlando della risposta che ho pubblicato qui si tratta semplicemente di caricare un file in un iframe per ottenere un submit "simile ad Ajax".

Ora, se hai già un form che gestisce l'invio del post, puoi semplicemente aggiungere il campo per il caricamento del file da qualche parte nel tuo form:

<form ...
...
<input type="file" name="thumbnail" id="thumbnail">
...
...
</form>

Assicurati che il tuo form abbia l'attributo enctype="multipart/form-data".

Poi, nello script di elaborazione del form, dopo aver creato il post (supponendo che tu stia usando wp_insert_post();) mantieni l'ID del post in una nuova variabile:

$new_post = wp_insert_post($post_array);

e dopo aggiungi:

            if (!function_exists('wp_generate_attachment_metadata')){
                require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                require_once(ABSPATH . "wp-admin" . '/includes/file.php');
                require_once(ABSPATH . "wp-admin" . '/includes/media.php');
            }
             if ($_FILES) {
                foreach ($_FILES as $file => $array) {
                    if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                        return "errore nel caricamento : " . $_FILES[$file]['error'];
                    }
                    $attach_id = media_handle_upload( $file, $new_post );
                }   
            }
            if ($attach_id > 0){
                //e se vuoi impostare quell'immagine come thumbnail del Post allora usa:
                update_post_meta($new_post,'_thumbnail_id',$attach_id);
            }

e la tua immagine verrà caricata e salvata come thumbnail del post.

13 mar 2011 19:25:43
Commenti

Grazie @Bainternet. Stavo avendo difficoltà a far inserire la miniatura, ma per qualche motivo quando ho sostituito '$new_post' con '$pid' inserisce la miniatura del post

Govnah Antwi-Boasiako Govnah Antwi-Boasiako
13 mar 2011 21:44:15

lool sono così stupido. Ho appena capito perché dovevo usare '$pid'

avevo questa riga $pid = wp_insert_post($new_post);

Govnah Antwi-Boasiako Govnah Antwi-Boasiako
13 mar 2011 21:47:07

Contento che tu abbia risolto, e ancora meglio che tu abbia capito il punto.

Bainternet Bainternet
13 mar 2011 22:05:22

Sì, grazie mille per il tuo aiuto. Ora che ho capito, è il momento di aggiungere un po' di ajax :)

Govnah Antwi-Boasiako Govnah Antwi-Boasiako
14 mar 2011 00:35:15

@Bainternet♦ grazie per la tua risposta, è utile, ma come farlo funzionare con più immagini. Ho cambiato il mio input in <input type="file" id="image" name="image[]" multiple="multiple" > ma non carica nulla. -qualche aiuto per favore?

Ehab Fawzy Ehab Fawzy
11 mar 2012 13:41:48

Sfortunatamente ho solo un account su Stackoverflow quindi posso dare solo un upvote a questa domanda. Risposta perfetta.

hemnath mouli hemnath mouli
27 set 2015 10:04:40
Mostra i restanti 1 commenti
0

Markup HTML:

 <p>
   <label for="custom-upload">Carica 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; /*Recupero l'ID del post corrente*/
$upload = $_FILES['upload']; /*Riceve l'immagine caricata dal form*/
add_custom_image($post_id, $upload); /*Chiama la funzione per il caricamento dell'immagine*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Recupera il percorso della directory di upload di WordPress*/

 if (is_writable($uploads['path']))  /*Verifica se la directory di upload è scrivibile*/
 {
  if ((!empty($upload['tmp_name'])))  /*Verifica se l'immagine caricata non è vuota*/
  {
   if ($upload['tmp_name'])   /*Verifica se l'immagine è stata caricata nella directory temporanea*/
   {
    $file=handle_image_upload($upload); /*Chiama la nostra funzione personalizzata per EFFETTIVAMENTE caricare l'immagine*/

    $attachment = array  /*Crea un 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);  /*Inserisce l'allegato al post e restituisce l'ID dell'allegato*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Genera i metadati per il nuovo allegato*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Recupera l'immagine precedentemente caricata*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*Se l'immagine esiste*/
     {
      wp_delete_attachment($prev_img[0]);  /*Elimina l'immagine precedente*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Salva 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, aggiorna 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'] )) /*Verifica se è un'immagine*/
        {
            /*gestisce il file caricato*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
29 mar 2011 15:34:39