2016-06-25 3 views
0

J'ai un site avec un formulaire frontal où les utilisateurs peuvent ajouter un nouveau message. Le formulaire contient des détails de base et un champ d'image. Le formulaire a également quelques champs d'image supplémentaires, contrôlés par acf.Le téléchargement de l'image Wordpress à partir de frontend génère 500 erreur interne du serveur

Maintenant, le problème est quand j'utilise des images comme png tout fonctionne bien. Mais quand j'utilise des images comme jpg, cela donne une erreur interne au serveur. En acf j'ai ajouté les formats de fichiers acceptés comme "jpg, png, jpeg". Mais je ne suis pas sûr de savoir comment ajouter des formats de fichier pour l'image sélectionnée.

Voici le code que j'utilise. Ici, la première image sera toujours l'image sélectionnée.

 foreach($_FILES as $file) { 
      if(is_array($file)) { 
       if($count==1){ 
        $featured_image_id = upload_user_file($file); 
       }else{ 
        $item_image[] = upload_user_file($file); 

       } 
      } 
      $count++; 
      } 

Et voici la fonction upload_user_file

function upload_user_file($file = array()) { 
    require_once(ABSPATH . 'wp-admin/includes/admin.php'); 
     $file_return = wp_handle_upload($file, array('test_form' => false)); 
     if(isset($file_return['error']) || isset($file_return['upload_error_handler'])) { 
      return false; 
     } else { 
      $filename = $file_return['file']; 
      $attachment = array(
       'post_mime_type' => $file_return['type'], 
       'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)), 
       'post_content' => '', 
       'post_status' => 'inherit', 
       'guid' => $file_return['url'] 
     ); 
      $attachment_id = wp_insert_attachment($attachment, $file_return['url']); 
      require_once(ABSPATH . 'wp-admin/includes/image.php'); 
      $attachment_data = wp_generate_attachment_metadata($attachment_id, $filename); 
      wp_update_attachment_metadata($attachment_id, $attachment_data); 
      if(0 < intval($attachment_id)) { 
      return $attachment_id; 
      } 
     } 
     return false; 
} 

Répondre

0

Ok je l'ai résolu. Pour une raison quelconque, les types de fichiers autorisés dans acf ne fonctionnaient pas pour moi. Donc, je viens de supprimer les types (c.-à-permettre tous les types de fichiers) et tout est revenu à la vie. Je sais que cela ne convient peut-être pas à tout le monde, mais je suppose que cela vous indique la bonne direction du problème.

+0

Hey, pouvez-vous élaborer à ce sujet? Je suis sûr que je suis confronté à exactement le même problème que vous. – Jacksonkr

+0

Il y a une option dans le champ d'image appelée "autoriser les types de fichiers". C'est ce que dit la documentation "Ajouter une validation de téléchargement pour des types de fichiers spécifiques.Entrez une liste séparée par des virgules pour spécifier quels types de fichiers sont autorisés ou laisser vide pour tous les types.Ajouté en v5.1.9". Donc, si vous le laissez vide, il permettra tous les types de fichiers. Dans de rares occasions, le fichier wordpress htaccess n'est pas mis à jour, alors essayez les paramètres> Permaliens et cliquez sur Enregistrer. Cela mettra à jour votre fichier htaccess. –