Trimite postare și încarcă imagine din front-end

13 mar. 2011, 15:51:50
Vizualizări: 49.3K
Voturi: 12

Încerc să fac ceva similar cu întrebarea de mai sus. Încerc să permit utilizatorilor să posteze și să încarce imagini din front-end. Am creat deja formularul de postare și funcționează.

Am urmărit și am încercat răspunsul postat de Robin I Knight încărcare-imagine-reprezentativă-din-front-end. Din păcate nu am reușit să îl fac să funcționeze. Este ceva ce ar trebui să modific sau să editez?

Mulțumesc.

0
Toate răspunsurile la întrebare 2
6
23

Dacă vorbești despre răspunsul pe care l-am postat aici, acesta presupune pur și simplu încărcarea unui fișier într-un iframe pentru a obține un submit "asemănător cu Ajax".

Acum, dacă deja ai un formular care gestionează trimiterea postării, poți pur și simplu să adaugi câmpul de încărcare fișier în formularul tău:

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

Asigură-te că formularul tău are atributul enctype="multipart/form-data".

Apoi, în scriptul de procesare al formularului, după ce ai creat postarea (presupunând că folosești wp_insert_post();), păstrează ID-ul postării într-o variabilă nouă:

$new_post = wp_insert_post($post_array);

Și după aceea adaugă:

            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 "upload error : " . $_FILES[$file]['error'];
                    }
                    $attach_id = media_handle_upload( $file, $new_post );
                }   
            }
            if ($attach_id > 0){
                //iar dacă dorești să setezi acea imagine ca imagine reprezentativă a postării, folosește:
                update_post_meta($new_post,'_thumbnail_id',$attach_id);
            }

Și imaginea ta va fi încărcată și salvată ca imagine reprezentativă a postării.

13 mar. 2011 19:25:43
Comentarii

Mulțumesc @Bainternet. M-am chinuit să fac să insereze thumbnail-ul, dar din nu știu ce motiv când am înlocuit '$new_post' cu '$pid' a inserat thumbnail-ul postării

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

haha sunt atât de prost. Abia acum am înțeles de ce a trebuit să folosesc '$pid'

aveam această linie $pid = wp_insert_post($new_post);

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

Mă bucur că ai reușit să rezolvi, și și mai bine că ai înțeles logica din spate.

Bainternet Bainternet
13 mar. 2011 22:05:22

Da, mulțumesc mult pentru ajutor. Acum că am înțeles, e timpul să adaug puțin ajax :)

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

@Bainternet♦ mulțumesc pentru răspuns, e de ajutor, dar cum să-l fac să funcționeze cu mai multe imagini. Am schimbat input-ul meu în <input type="file" id="image" name="image[]" multiple="multiple" > dar nu încarcă nimic. - vă rog ajutați-mă?

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

Din păcate am doar un cont pe Stackoverflow așa că pot da doar un upvote la această Întrebare. Răspuns perfect.

hemnath mouli hemnath mouli
27 sept. 2015 10:04:40
Arată celelalte 1 comentarii
0

Marcaj HTML:

 <p>
   <label for="custom-upload">Încarcă imagine nouă:</label>
   <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
 </p>
 <?php
  /*Preluarea imaginii*/
  $attachment = get_post_meta($postid, 'custom_image');

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

 ?>

Încărcarea imaginii:

<?php
global $post; /*Obiectul global post*/
$post_id = $post->ID; /*Obținerea ID-ului postului curent*/
$upload = $_FILES['upload']; /*Recepționarea imaginii încărcate din formular*/
add_custom_image($post_id, $upload); /*Apelarea funcției de încărcare a imaginii*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Obținerea căii directorului de încărcare din WordPress*/

 if (is_writable($uploads['path']))  /*Verificarea dacă directorul de încărcare are permisiuni de scriere*/
 {
  if ((!empty($upload['tmp_name'])))  /*Verificarea dacă imaginea încărcată nu este goală*/
  {
   if ($upload['tmp_name'])   /*Verificarea dacă imaginea a fost încărcată în directorul temporar*/
   {
    $file=handle_image_upload($upload); /*Apelarea funcției noastre personalizate pentru a ÎNCĂRCA EFECTIV imaginea*/

    $attachment = array  /*Crearea atașamentului pentru postul nostru*/
    (
      'post_mime_type' => $file['type'],  /*Tipul atașamentului*/
      'post_parent' => $post_id,  /*ID-ul postului*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Inserarea atașamentului postului și returnarea ID-ului atașamentului*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generarea metadatelor pentru noul atașament*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Obținerea imaginii încărcate anterior*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*Dacă imaginea există*/
     {
      wp_delete_attachment($prev_img[0]);  /*Ștergerea imaginii anterioare*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Salvarea ID-ului atașamentului în metadate*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*Dacă nu există eroare, actualizarea metadatelor pentru imaginea nou încărcată*/
    }
   }
  }
  else
  {
   echo 'Vă rugăm să încărcați imaginea.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Verificarea dacă este imagine*/
        {
            /*manipularea fișierului încărcat*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
29 mar. 2011 15:34:39