J'ai plusieurs champs de profil supplémentaires différents que j'ai définis dans functions.php. Cependant, avec le téléchargement, si un utilisateur télécharge une image et enregistre le formulaire, celle-ci est définie. Toutefois, s'il retourne en arrière et modifie un autre champ, le champ de l'image est défini sur nul.
Voici le code que j'ai dans mon fichier functions.php. Toute aide sera grandement appréciée.
<?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"';
}
Le dernier paramètre de update_user_meta()
, la valeur précédente, est un paramètre facultatif. S'il est défini, il vérifie si la valeur de la base de données est bien celle que vous avez fournie à update_user_meta()
. Si vous définissez ce paramètre en récupérant la valeur de la base de données, il est complètement redondant. Alors d'abord, omettez ça.
Ceci étant dit, voici ce qui résout votre problème de réécriture:
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 );
}
La terminologie est un peu déroutante, puisque UPLOAD_ERR_OK
est un message d’état et non une erreur, mais c’est la façon de vérifier si le téléchargement a réussi. Si vous en faites la condition pour enregistrer la méta-valeur, vous pouvez continuer.
Pour plus de détails sur les erreurs ou les états du code $_FILES
superglobal, voir Messages d'erreur expliqués à partir de PHP. _ manuel .
EDIT: Comment obtenir l'URL de l'image téléchargée
Cette modification s'adresse à la question développée dans le commentaire à cette réponse.
$pic_data = get_user_meta( $curauth->ID, 'picture', true );
$pic_url = $pic_data['url'];
enregistrera l'URL dans une variable, qui pourra ensuite être répercutée où vous le souhaitez. En supposant que $curauth
est l'objet utilisateur actuel. Vous pouvez utiliser la variable globale WordPress $current_user
à la place, mais si vous avez déjà l'objet, vous pouvez aussi vous en aller.
// pour le téléchargement de fichier add_action ('user_edit_form_tag', 'make_form_accept_uploads'); function make_form_accept_uploads () {echo 'enctype = "multipart/form-data"'; }
fonction 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"); function save_custom_user_profile_fields ($ user_id) {
if (! current_user_can ('manage_options')) renvoie false;
if ($ _FILES ['portfolioimage'] ['erreur'] === 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');