I have use the below written code for move the file to a folder named “training”.
<td> <input type="file" name="training_image" accept="image/*" id="traing-image"value="<?php echo esc_attr( get_the_author_meta( 'training_image', $user->ID ) ); ?>" class="regular-text" /> </td>
To save the image i wrote this
$training_path = time().'_'.$_FILES['training_image']['name']; $tmp_file_name = $_FILES['training_image']['tmp_name']; $upload_dir = wp_upload_dir(); if($training_path){ move_uploaded_file($tmp_file_name,$upload_dir['baseurl'].'/training/'.$training_path); } update_user_meta( $user_id, 'training-image', $training_path );
But i could not get any result. Did i do any mistake. please help me.
This is my entire code
function training_user_profile_fields( $user ) { ?> <h3><?php// _e("Extra profile information", "blank"); ?></h3> <table class="form-table"> <tr> <th><label for="traing-image"><?php _e("Upload Your Training Certificate:"); ?></label></th> <td> <input type="file" name="training_image" id="traing-image"value="<?php echo esc_attr( get_the_author_meta( 'training_image', $user->ID ) ); ?>" class="regular-text" /> </td> </tr> </table> <?php } add_action( 'personal_options_update', 'save_extra_user_profile_fields' ); add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' ); function save_extra_user_profile_fields( $user_id ) { if ( !current_user_can( 'edit_user', $user_id ) ) { return false; } $training_path = time().'_'.$_FILES['training_image']['name']; $tmp_file_name = $_FILES['training_image']['tmp_name']; echo "filename".$_FILES['training_image']['tmp_name']; exit; $upload_dir = wp_upload_dir(); if($training_path){ move_uploaded_file($tmp_file_name,$upload_dir['baseurl'].'/training/'.$training_path); } update_user_meta( $user_id, 'training-image', $training_path ); }
Advertisement
Answer
You are doing it wrong. $upload_dir['baseurl']
gives the URL
to the uploads directory not the absolute path
to the directory. You can’t upload or move files using URL.
HTTP wrapper does not support writeable connections
So $upload_dir['baseurl']
should change to $upload_dir[‘basedir’].
It should be
$training_path = time().'_'.$_FILES['training_image']['name']; $tmp_file_name = $_FILES['training_image']['tmp_name']; $upload_dir = wp_upload_dir(); if($training_path){ move_uploaded_file($tmp_file_name,$upload_dir['basedir'].'/training/'.$training_path); } update_user_meta( $user_id, 'training-image', $training_path );
Also make sure that your form’s enctype
is set to multipart/form-data
(enctype="multipart/form-data")
UPDATE
WordPress profile form doesn’t have enctype
attribute by default. By you can add that using a hook. Add this in your themes functions.php
add_action('user_edit_form_tag', 'add_enctype'); function add_form_enctype () { echo 'enctype="multipart/form-data"'; }
Hope this helps