私はfunctions.phpで設定したさまざまな追加のプロファイルフィールドを持っていますが、ユーザーが画像をアップロードしてフォームを保存した場合はアップロードしますヌル。
これが私のfunctions.phpファイルにあるコードです。どんな助けでも本当に感謝されるでしょう。
<?php
add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );
function extra_user_profile_fields( $user ) {
$r = get_user_meta( $user->ID, 'picture', true );
?>
<!-- Artist Photo Gallery -->
<h3><?php _e("Public Profile - Gallery", "blank"); ?></h3>
<table class="form-table">
<tr>
<th scope="row">Picture</th>
<td><input type="file" name="picture" value="" />
<?php //print_r($r);
if (!isset($r['error'])) {
$r = $r['url'];
echo "<img src='$r' />";
} else {
$r = $r['error'];
echo $r;
}
?>
</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; }
$_POST['action'] = 'wp_handle_upload';
$r = wp_handle_upload( $_FILES['picture'] );
update_user_meta( $user_id, 'picture', $r, get_user_meta( $user_id, 'picture', true ) );
}
}
add_action('user_edit_form_tag', 'make_form_accept_uploads');
function make_form_accept_uploads() {
echo ' enctype="multipart/form-data"';
}
前の値である update_user_meta()
の最後のパラメーターは、オプションのパラメーターです。もし設定されていれば、データベースの値が実際にあなたがupdate_user_meta()
を与えたものであるかどうかチェックします。データベースから値を取得してそのパラメータを設定した場合、それは完全に冗長です。だから最初に、それを省略します。
そうは言っても、これは上書きに関するあなたの問題を解決するものです。
if( $_FILES['picture']['error'] === UPLOAD_ERR_OK ) {
$upload_overrides = array( 'test_form' => false ); // if you don’t pass 'test_form' => FALSE the upload will be rejected
$r = wp_handle_upload( $_FILES['picture'], $upload_overrides );
update_user_meta( $user_id, 'picture', $r );
}
UPLOAD_ERR_OK
はステータスメッセージであり、エラーではないので、用語は少しわかりにくいですが、アップロードが成功したかどうかを確認する方法です。それをメタ値を保存するための条件にすれば、うまくいくでしょう。
$_FILES
スーパーグローバルのエラーまたはステータスの詳細については、 を参照してください。 PHPマニュアルからを説明しました 。
編集:アップロードされた画像のURLを取得する方法
この編集は、この回答に対するコメント内の拡張された質問に対応しています。
$pic_data = get_user_meta( $curauth->ID, 'picture', true );
$pic_url = $pic_data['url'];
uRLを変数に保存します。その結果、好きな場所にエコーすることができます。 $curauth
が現在のユーザーオブジェクトであると仮定します。あなたは代わりにグローバルなWordPress変数$current_user
を使うことができます、しかし、あなたがすでにオブジェクトを持っているならば、それも同様に使うかもしれません。
//ファイルアップロード用add_action( 'user_edit_form_tag'、 'make_form_accept_uploads');関数make_form_accept_uploads(){echo 'enctype = "multipart/form-data"'; }
function custom_user_profile_fields($ user){if(is_object($ user)){$ r = get_user_meta($ user-> ID、 'portfolioimage'、true); } else {$ r = null。 }
?>
<table class="form-table">
<h3>Portfolio</h3>
<tr>
<th>
<label for="image">Portfolio Image</label>
</th>
<td>
<?php
if (!isset($r['error']))
{
$r = $r['url'];
echo "<img src='$r' width='96' hieght='96'/>";
}
else
{
$r = $r['error'];
echo $r;
}
?>
<br/>
<span class="description">
Please upload an image for your profile.
</span>
<br/>
<input type="file" class="button-primary" value="Upload Image" id="portfolioimage" name="portfolioimage" multiple/><br />
</td>
</tr>
add_action( "show_user_profile"、 "custom_user_profile_fields"); add_action( "edit_user_profile"、 "custom_user_profile_fields"); add_action( "user_new_form"、 "custom_user_profile_fields");関数save_custom_user_profile_fields($ user_id){
if(!current_user_can( 'manage_options'))がfalseを返す場合。
if($ _FILES ['portfolioimage'] ['error'] === UPLOAD_ERR_OK){$ upload_overrides = array( 'test_form' => false); $ r = wp_handle_upload($ _FILES ['portfolioimage']、$ upload_overrides); update_user_meta($ user_id、 'portfolioimage'、$ r); }}
add_action( 'user_register'、 'save_custom_user_profile_fields'); add_action( 'profile_update'、 'save_custom_user_profile_fields');