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

11

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à rempli le formulaire et son fonctionnement.

Je viens de suivre et d’essayer la réponse publiée par Robin I Knight télécharger -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?

Merci.

    
posée Govnah Antwi-Boasiako 13.03.2011 - 14:51

2 réponses

21

Si vous parlez de la réponse, j’ai posté ici il suffit 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" .

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 l'article 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.

    
réponse donnée Bainternet 13.03.2011 - 18:25
1

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);
  }

 ?>

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;
}
?>
    
réponse donnée Arvind07 29.03.2011 - 14:34

Lire d'autres questions sur les étiquettes