wake-up-neo.com

Holen Sie sich den grundlegenden Image Uploader auf der Benutzerprofilseite

Ich versuche, den Benutzerprofilseiten einen Bild-Uploader hinzuzufügen. Ich habe es auf einer einfachen Registrierungsseite eingerichtet und lauffähig gemacht, aber irgendwie funktioniert der gleiche, aber leicht angepasste Code nicht, wenn er zu functions.php hinzugefügt wird. Das Feld wird geladen und WordPress ermöglicht eine einfache Aktualisierung, in der Profilansicht wird jedoch kein Bild angezeigt. Um das Bild zu bekommen und es zu speichern, benutze ich

/********************************************************************
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='';
}
}
}

So zeigen Sie das Feld in HTML an:

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

Und um es zu speichern, benutze ich dies:

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

Weiß jemand, warum im Profil dieser Code angezeigt wird:

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

lädt kein gespeichertes Bild?

Update I und II

Grundlegendes Debuggen

Update III Nachdem ich eine isset() hinzugefügt habe, bin ich ein wenig weiter gekommen:

[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

In dieser Zeile habe ich update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture ); Scheint so, als hätte ich die Variable profilePicture definiert, sie wird aber nicht erfasst War nur ein Hinweis und scheint weder relevant zu sein noch das Upload-Problem zu verursachen.

Update IV

Ich habe den Bild-Uploader-Code in eine Funktion eingebunden und als Aktion hinzugefügt. Siehe Code mit Updates oben. Ich habe noch eine undefinierte Variable profilePicture und das Bild wurde nicht hochgeladen. Die gesamte Datei functions.php befindet sich hier http://Pastebin.com/YGYz3Qnv

Update V

Ich habe gerade festgestellt, dass ich keine gute Option $ _POST für profilePicture habe. Wenn ich das von einem @brasofilo unter http://plugins.svn.wordpress.org/user-avatar/trunk/user-avatar.php erwähnte Plugin betrachte, sehe ich diesen Code, den ich möglicherweise verwenden kann. aber ich muss es noch viel anpassen:

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

Ich frage mich nur, ob ein Formular benötigt wird, da es nicht für die anderen Textfelder erforderlich ist, und wie ich $user_id hinzufügen und update_user_meta anpassen muss.

Update VI

$profilePicture global gemacht, wie vom Mitwirkenden empfohlen

Update VII

Erwägen Sie die Verwendung der Option aus nicht verwandten Medien hier . Da es aber noch einige Zeit in Anspruch nimmt, dies in meine aktuellen Funktionen zu integrieren, werde ich diesen Thread so lange geöffnet lassen, bis ich es geschafft habe.

6
rhand

Nun, danke an alle für ihre Vorschläge. Am Ende habe ich mich für die Integration von Woothemes Media Uploader entschieden, wie Sie hier bei Github sehen können: https://github.com/devinsays/options-framework-plugin/blob/master/options-medialibrary-uploader.php It ist in einen Themenrahmen eingebunden, den ich in mein eigenes Thema einbinde, damit ich zwei Fliegen mit einer Klappe schlagen kann.

0
rhand

Überprüfen Sie dieses Plugin: User Avatar . Sie können es verwenden oder seine Funktionen überprüfen, um Ihre anzupassen.

1
brasofilo

$profilePicture ist außerhalb des Gültigkeitsbereichs des Speichercodes definiert und wird im globalen Gültigkeitsbereich niemals deklariert oder verwendet.

Sobald die Upload-Funktion zurückgibt, ist die Variable entweder müllsammelbar oder es handelt sich um eine völlig andere Variable mit demselben Namen.

Ich würde es als global deklarieren und mehr Validierung hinzufügen, z. B. prüfen, ob die Variable leer ist, bevor ich versuche, sie zu verwenden

1
Tom J Nowell