web-dev-qa-db-fra.com

Obtenir l'image de base Uploader sur la page de profil utilisateur

J'essaie d'ajouter un téléchargeur d'images aux pages de profil de l'utilisateur. Je l'ai en cours d'exécution sur une page d'inscription de base, mais en quelque sorte la même chose, mais un code légèrement ajusté ne fonctionne pas lorsqu'il est ajouté à functions.php. Le champ est chargé et WordPress permet une mise à jour facile, mais aucune image n’est affichée dans la vue de profil. Pour obtenir l'image et la stocker, j'utilise

/********************************************************************
Profile Image Upload Field Code
*********************************************************************/
require_once( STYLESHEETPATH . '/img_upload_resize_crop.php' );

add_action( 'init', 'custom_img_uploader' );

function custom_img_uploader () {

    if (isset($_FILES['profilePicture']['name'])!= "" ) {

if ( $_FILES['profilePicture']['name']!="" ) {
    $your_image = new _image;
    $upload_dir = wp_upload_dir();
    //To Upload
    $your_image->uploadTo = $upload_dir['basedir'].'/';
    $upload = $your_image->upload($_FILES['profilePicture']);


    //To Resize
    $your_image->newPath = $upload_dir['basedir'].'/thumbs/';
    $your_image->newWidth = 150;
    $your_image->newHeight = 200;
    $resized = $your_image->resize();
    $profilePicture=str_replace($upload_dir['basedir'].'/thumbs/', "", $resized );
    unlink($upload);
}else{
    $profilePicture='';
}
}
}

Pour afficher le champ en HTML, j'ai:

<!-- begin image uploader field -->
<tr>
<th><label for="profilePicture"><?php _e("Profile Image"); ?></label></th>
<td>
<input type="file" name="profilePicture" id="profilePicture" style="float:left;" />
</td>
</tr>

Et pour le sauvegarder, j'utilise ceci:

update_user_meta( $user_id, 'userphoto_thumb_height', 59);
update_user_meta( $user_id, 'userphoto_thumb_width', 80 );
update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture );

Est-ce que quelqu'un voit pourquoi dans le profil Voir ce code:

<?php if(get_the_author_meta( 'userphoto_thumb_file', $getId )!=""){?>
                        <img src="<?=$uploads['baseurl'];?>/thumbs/<?=get_the_author_meta( 'userphoto_thumb_file', $getId );?>" />

ne charge pas une image stockée?

Mise à jour I et II

Débogage de base

Mise à jour III Après avoir ajouté une isset(), je suis un peu plus loin:

[28-Mar-2012 07:14:46] PHP Notice:  Undefined variable: profilePicture in /home/user/public_html/wp-content/themes/theme-name/functions.php on line 346

Sur cette ligne, j'ai update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture ); On dirait que même si j'ai défini la variable profilePicture, elle n'est pas saisie Était juste un avis et ne semble pas être pertinent ni causer le problème de téléchargement.

Mise à jour IV

J'ai enveloppé le code de téléchargement d'images dans une fonction et l'ajouté en tant qu'action. Voir le code avec les mises à jour ci-dessus. J'ai toujours une variable non définie profilePicture et l'image n'est pas téléchargée. Le fichier functions.php complet se trouve ici http://Pastebin.com/YGYz3Qnv

Update V

Je viens de me rendre compte que je n'ai pas de bonne option $ _POST pour le profilePicture. En regardant le plugin mentionné par un @brasofilo à http://plugins.svn.wordpress.org/user-avatar/trunk/user-avatar.php Je vois ce code que je pourrais peut-être utiliser, mais je besoin de l'ajuster beaucoup:

<form enctype="multipart/form-data" id="uploadForm" method="POST" action="<?php echo admin_url('admin-ajax.php'); ?>?action=user_avatar_add_photo&step=2&uid=<?php echo $uid; ?>" >
            <label for="upload"><?php _e('Choose an image from your computer:','user-avatar'); ?></label><br /><input type="file" id="upload" name="uploadedfile" />
            <input type="hidden" name="action" value="save" />
            <?php wp_nonce_field('user-avatar') ?>
        <p class="submit"><input type="submit" value="<?php esc_attr_e('Upload'); ?>" /></p>
    </form>

Je me demande simplement si un formulaire est nécessaire, comme c'était le cas pour les autres champs de texte, et comment je dois ajouter $user_id et comment ajuster update_user_meta.

Update VI

Fait $profilePicture global comme recommandé par le contributeur

Mise à jour VII

Envisager d’utiliser l’option de Unrelated Media here . Mais comme il me faudra encore un peu de temps pour intégrer cela dans mon fichier functions.php actuel, je garderai ce fil ouvert jusqu'à ce que j'aie réussi à le faire.

6
rhand

Merci à tous pour leurs suggestions. En fin de compte, j'ai opté pour les intégrations de Woothemes Media Uploader, comme vous pouvez le voir ici sur Github: https://github.com/devinsays/options-framework-plugin/blob/master/options-medialibrary-uploader.php It est intégré dans un cadre thématique que je suis en train d’intégrer dans mon propre thème pour pouvoir ainsi tuer deux oiseaux d’une pierre.

0
rhand

Vérifiez ce plugin: User Avatar . Vous pouvez l'utiliser ou vérifier ses fonctions pour adapter les vôtres.

1
brasofilo

$profilePicture est défini en dehors de la portée du code de sauvegarde et n'est jamais déclaré ni utilisé dans la portée globale.

Par conséquent, dès que la fonction de téléchargement retourne, la variable est nettoyée ou vous avez affaire à une variable complètement différente qui porte le même nom.

Je le déclarerais en tant que global et ajouterais une validation supplémentaire, par exemple en vérifiant si la variable est vide avant d'essayer de l'utiliser

1
Tom J Nowell