web-dev-qa-db-fra.com

Soumettre un message et télécharger une image à partir du serveur frontal

J'essaie de faire quelque chose de similaire à la question ci-dessus. J'essaie de faire en sorte que les utilisateurs publient et téléchargent des images à partir de front-end. 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 ne pouvais pas le faire fonctionner. Y a-t-il quelque chose que je suis supposé changer ou éditer?

Je vous remercie.

11

Si vous parlez de la réponse, j'ai posté ici il s'agit simplement de télécharger le fichier dans un iframe pour obtenir "Ajax like".

Maintenant, si vous avez déjà un formulaire qui gère l'envoi après l'envoi, vous pouvez simplement ajouter le champ de fichier de téléchargement saisi quelque part dans votre formulaire:

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

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

ensuite, 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 publication dans une nouvelle variable:

$new_post = wp_insert_post($post_array);

et après cela ajouter:

            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 sauvegardée en tant que vignette de publication.

21
Bainternet

Marquage 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;
}
?>
1
Arvind07