1

ファイルを「トレーニング」という名前のフォルダーに移動するために、以下に記述されたコードを使用しました。

  <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>

画像を保存するには、これを書きました

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

しかし、私は結果を得ることができませんでした。私は何か間違いをしましたか。私を助けてください。

これは私のコード全体です

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

1 に答える 1

2

それは間違っている。ディレクトリではなくアップロードディレクトリに$upload_dir['baseurl']与えます。URL を使用してファイルをアップロードまたは移動することはできません。URLabsolute path

HTTP wrapper does not support writeable connections

したがって$upload_dir['baseurl']、$upload_dir['basedir'] に変更する必要があります。

そのはず

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

また、フォームenctypeがに設定されていることを確認してくださいmultipart/form-data (enctype="multipart/form-data")

アップデート

enctypeデフォルトでは、WordPress プロフィール フォームには属性がありません。フックを使用してそれを追加できます。これをテーマに追加しますfunctions.php

add_action('user_edit_form_tag', 'add_enctype');

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

お役に立てれば

于 2013-04-09T08:51:16.807 に答える