web-dev-qa-db-fra.com

Wordpress User Profile Upload - Si la page est enregistrée, réinitialiser le fichier

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"';
}
1
Storm3y

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.

2
Johannes Pille

// 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; }

?>

Titre

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

encore une fois, ne le faites que si

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

0
Kundan Naik