2017-10-22 28 views
0

このコードをPastebin hereから使用して、ファイル入力フィールドを含むフォームをユーザープロファイルの管理ページに追加しても問題なく動作していましたが、問題は入力ファイルの配列に変更できないということです。ファイルの入力フィールドをファイルの配列に変更するにはどうすればよいですか?

profile_photoを写真の配列に変更し、それをユーザープロフィールページに実装したいと考えています。

誰かがこれを手伝ってくれますか?

add_action('user_edit_form_tag','make_uploadable_form'); 

function make_uploadable_form() { 
     echo ' enctype="multipart/form-data"'; 
} 

add_action('show_user_profile', 'UploadField'); 
add_action('edit_user_profile', 'UploadField'); 

function UploadField($user) { 
     if (! current_user_can('edit_user')) 
       return false; 

     $pid = get_user_meta($user->ID, 'profile_photo', true); 
     $img = wp_get_attachment_image($pid); 

     if (! empty($img)) 
     echo "<hr/>".$user->ID; 
     echo "<hr/>".$pid; 
     echo($img); 
?> 

<h3>Extra profile information</h3> 

<table class="form-table"> 
    <tr> 
     <th><label for="Upload">Upload</label></th> 
      <td> 
       <input name="profile_photo" type="file" id="profile_photo" value="" /> 
      </td> 
</table> 

<?php 
} 

add_action('personal_options_update', 'save_user_custom'); 
add_action('edit_user_profile_update', 'save_user_custom'); 

function save_user_custom($user_id){ 

     if($user_id == false) 
       return false; 

     // If the upload field has a file in it 
     if(isset($_FILES['profile_photo'])){ 
       if(!function_exists('wp_handle_upload')) 
         require_once(ABSPATH.'wp-admin/includes/file.php'); 

       // Get the type of the uploaded file. This is returned as "type/extension" 
       $arr_file_type = wp_check_filetype(basename($_FILES['profile_photo']['name'])); 
       $uploaded_file_type = $arr_file_type['type']; 
       // Set an array containing a list of acceptable formats 
       $allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png'); 
       // If the uploaded file is the right format 
       if(in_array($uploaded_file_type, $allowed_file_types)) { 
         // Options array for the wp_handle_upload function. 'test_upload' => false 
         $upload_overrides = array('test_form' => false); 

         // Handle the upload using WP's wp_handle_upload function. Takes the posted file and an options array 
         $uploaded_file = wp_handle_upload($_FILES['profile_photo'], $upload_overrides); 

         // If the wp_handle_upload call returned a local path for the image 
         if(isset($uploaded_file['file'])) { 

           // The wp_insert_attachment function needs the literal system path, which was passed back from wp_handle_upload 
           $file_name_and_location = $uploaded_file['file']; 

           // Generate a title for the image that'll be used in the media library 
           $file_title_for_media_library = 'your title here'; 

           // Set up options array to add this file as an attachment 
           $attachment = array(
               'post_mime_type' => $uploaded_file_type, 
               'post_title' => 'Uploaded image ' . addslashes($file_title_for_media_library), 
               'post_content' => '', 
               'post_status' => 'inherit' 
           ); 

           // Run the wp_insert_attachment function. This adds the file to the media library and generates the thumbnails. If you wanted to attch this image to a post, you could pass the post id as a third param and it'd magically happen. 
           $attach_id = wp_insert_attachment($attachment, $file_name_and_location); 
           require_once(ABSPATH . "wp-admin" . '/includes/image.php'); 
           $attach_data = wp_generate_attachment_metadata($attach_id, $file_name_and_location); 
           wp_update_attachment_metadata($attach_id, $attach_data); 

           update_user_meta($user_id, 'profile_photo', $attach_id); 

         } 
       } 

     } 

} 

答えて

0

この試してみてください:あなたはこのようなあなたの入力を書く場合
を:

<input name="profile_photo[1]" type="file" id="profile_photo" value="" /> 
<input name="profile_photo[2]" type="file" id="profile_photo" value="" /> 

あなたの入力ファイルを配列の名前profile_photoを持っています。 thereを参照してください。

+0

他のコードにどのように適用するか教えてください。 – Tarek

+0

次の質問に対する回答を読んで、サーバー側のスクリプトを実装する方法を説明します。https://stackoverflow.com/questions/2704314/multiple-file-upload-in-php – Yes92

関連する問題