Soumettre un post et télécharger une image depuis le front-end


11

J'essaie de faire quelque chose de similaire à la question ci-dessus. J'essaie de faire publier et télécharger des images depuis le front-end par les utilisateurs. J'ai déjà fait le formulaire de poste et son fonctionnement.

Je viens de suivre et d'essayer la réponse publiée par Robin I Knight upload-post-thumbnail-from-the-front-end . Malheureusement, je n'ai pas pu le faire fonctionner. Y a-t-il quelque chose que je suis censé changer ou modifier?

Je vous remercie.

Réponses:


22

Si vous parlez de la réponse que j'ai publiée ici, il vous suffit de télécharger le fichier dans un iframe pour obtenir une soumission "Ajax like".

Maintenant, si vous avez déjà un formulaire qui gère la soumission du post, vous pouvez simplement ajouter l'entrée de champ de fichier de téléchargement quelque part dans votre formulaire:

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

assurez-vous que votre formulaire a un enctype="multipart/form-data"attribut.

puis dans votre script de traitement de formulaire après avoir créé la publication (en supposant que vous utilisez wp_insert_post();) conservez l'ID de la publication dans une nouvelle var:

$new_post = wp_insert_post($post_array);

et après cela, ajoutez:

            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){
                //and if you want to set that image as Post  then use:
                update_post_meta($new_post,'_thumbnail_id',$attach_id);
            }

et votre image sera téléchargée et enregistrée en tant que miniature de publication.


Merci @Bainternet. J'avais du mal à l'obtenir pour insérer la vignette, mais pour une raison quelconque, quand j'ai remplacé «$ new_post» par «$ pid», il insère la vignette du message
Govnah Antwi-Boasiako

lool je suis tellement stupide. Je viens de pointer pourquoi j'ai dû utiliser '$ pid' j'avais cette ligne$pid = wp_insert_post($new_post);
Govnah Antwi-Boasiako

Heureux que vous ayez travaillé, et mieux c'est que vous avez compris.
Bainternet

Oui, merci beaucoup pour votre aide. Maintenant que je le comprends, il est temps d'ajouter de l'ajax :)
Govnah Antwi-Boasiako

1
Malheureusement, je n'ai qu'un seul compte dans Stackoverflow, je ne peux donc donner qu'un seul vote positif à cette question. Réponse parfaite.
hemnath mouli

1

Balisage HTML:

 <p>
   <label for="custom-upload">Upload New Image:</label>
   <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
 </p>
 <?php
  /*Retrieving the image*/
  $attachment = get_post_meta($postid, 'custom_image');

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

 ?>

Téléchargement de l'image:

<?php
global $post; /*Global post object*/
$post_id = $post->ID; /*Geting current post id*/
$upload = $_FILES['upload']; /*Receive the uploaded image from form*/
add_custom_image($post_id, $upload); /*Call image uploader function*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Get path of upload dir of wordpress*/

 if (is_writable($uploads['path']))  /*Check if upload dir is writable*/
 {
  if ((!empty($upload['tmp_name'])))  /*Check if uploaded image is not empty*/
  {
   if ($upload['tmp_name'])   /*Check if image has been uploaded in temp directory*/
   {
    $file=handle_image_upload($upload); /*Call our custom function to ACTUALLY upload the image*/

    $attachment = array  /*Create attachment for our post*/
    (
      'post_mime_type' => $file['type'],  /*Type of attachment*/
      'post_parent' => $post_id,  /*Post id*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Insert post attachment and return the attachment id*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generate metadata for new attacment*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Get previously uploaded image*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*If image exists*/
     {
      wp_delete_attachment($prev_img[0]);  /*Delete previous image*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Save the attachment id in meta data*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*If there is no error, update the metadata of the newly uploaded image*/
    }
   }
  }
  else
  {
   echo 'Please upload the image.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Check if image*/
        {
            /*handle the uploaded file*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.