Cum să adaugi un încărcător de imagini pe pagina de profil utilizator
Încerc să adaug un încărcător de imagini pe paginile de profil ale utilizatorilor. Am reușit să-l implementez pe o pagină de înregistrare de bază, dar același cod, ușor modificat, nu funcționează când este adăugat în functions.php. Câmpul se încarcă și WordPress permite actualizarea ușoară, dar în vizualizarea profilului nu este afișată nicio imagine. Pentru a obține și stoca imaginea folosesc:
/********************************************************************
Cod pentru câmpul de încărcare imagine profil
*********************************************************************/
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();
//Pentru încărcare
$your_image->uploadTo = $upload_dir['basedir'].'/';
$upload = $your_image->upload($_FILES['profilePicture']);
//Pentru redimensionare
$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='';
}
}
}
Pentru a afișa câmpul în HTML am:
<!-- început câmp încărcător imagine -->
<tr>
<th><label for="profilePicture"><?php _e("Imagine Profil"); ?></label></th>
<td>
<input type="file" name="profilePicture" id="profilePicture" style="float:left;" />
</td>
</tr>
Și pentru a salva imaginea folosesc:
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 );
Vede cineva de ce în vizualizarea profilului acest cod:
<?php if(get_the_author_meta( 'userphoto_thumb_file', $getId )!=""){?>
<img src="<?=$uploads['baseurl'];?>/thumbs/<?=get_the_author_meta( 'userphoto_thumb_file', $getId );?>" />
nu încarcă imaginea stocată?
Actualizare I și II
Depanare de bază
Actualizare III
După adăugarea unui isset()
am ajuns puțin mai departe:
[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
Pe acea linie am update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture );
Se pare că, deși am definit variabila Era doar o notificare și nu pare să fie relevantă sau să cauzeze problema de încărcare.profilePicture
, aceasta nu este preluată
Actualizare IV
Am încapsulat codul încărcătorului de imagini într-o funcție și l-am adăugat ca acțiune. Vezi codul cu actualizările de mai sus. Încă am o variabilă nedefinită profilePicture
și nici imaginea nu se încarcă. Fișierul întreg functions.php este aici http://pastebin.com/YGYz3Qnv
Actualizare V
Tocmai am realizat că nu am o opțiune bună $_POST pentru profilePicture. Privind pluginul menționat de @brasofilo la http://plugins.svn.wordpress.org/user-avatar/trunk/user-avatar.php văd acest cod pe care aș putea să-l folosesc, dar trebuie să-l adaptez mult:
<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('Alege o imagine de pe 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('Încarcă'); ?>" /></p>
</form>
Mă întreb dacă este nevoie de un formular, deoarece nu a fost necesar pentru alte câmpuri text și cum trebuie să adaug $user_id
și cum să ajustez update_user_meta
Actualizare VI
Am făcut $profilePicture
globală conform recomandării contributorului
Actualizare VII
Mă gândesc să folosesc opțiunea de la Unrelated Media aici. Dar, deoarece va dura încă ceva timp până voi integra acest lucru în fișierul meu curent functions.php, voi păstra acest thread deschis până voi reuși să fac acest lucru.
Verifică acest plugin: User Avatar. Îl poți folosi sau poți analiza funcțiile sale pentru a le adapta la ale tale.

$profilePicture
este definită în afara domeniului de aplicare a codului de salvare și nu este niciodată declarată sau utilizată în domeniul global.
Ca urmare, imediat ce funcția de încărcare returnează, fie variabila este colectată ca deșeu, fie aveți de-a face cu o variabilă complet diferită care are același nume.
Aș declara-o ca globală și aș adăuga mai multă validare, cum ar fi verificarea dacă variabila este goală înainte de a încerca să o utilizați.

Am actualizat codul - vezi http://pastebin.com/YGYz3Qnv - și am făcut $profilePicture
global. Mulțumesc pentru atenționare! Cum pot adăuga mai multă validare pentru a verifica dacă variabila este goală? isset()
este deja adăugat.. Și tot cred că am și o problemă cu $_POST..

Prefer să folosesc if(empty()){ deoarece verifică și pentru array-uri goale, poate fi necesar să faci formularul să utilizeze multipart encoding, deși nu-mi amintesc un site/răspuns care să explice asta, așa că voi posta în curând, dar consultă plugin-ul User Photo

Privind la pastebin, nu ai făcut deloc variabila globală, privind la funcția relevantă arată identic, nu există global $profilePicture; în funcția custom_img_uploader

Văzând întregul tău cod, nu sunt sigur de ce procesul de încărcare este într-o funcție separată pe un hook init, nu ar fi mai bine imediat deasupra apelurilor update_usermeta?

Cred că ar fi mai bine să folosești ceva de genul plugin-ului UserPhoto în schimb, funcționează și are mai multe funcții și opțiuni

Mă uit acum la http://wordpress.org/extend/plugins/user-photo/. Ar putea fi o idee bună. Trebuie doar să ajustez formularul meu de înregistrare pentru a stoca imaginea în același mod, astfel încât actualizarea să funcționeze mai târziu. Să încarc imaginea în vizualizarea profilului s-ar putea să nu fie prea greu, atâta timp cât pot obține cumva userid-ul pentru a se încărca poza corectă de profil. Având în vedere că toți acești factori contează, speram să pot rămâne la codul pe care îl am, astfel încât să trebuiască să modific doar functions.php, nu și formularul de înregistrare și vizualizarea profilului. Nu sunt complet începător în PHP, dar încă am muuulte de învățat

Am întrebat dezvoltatorul UserPhoto dacă există deja o implementare a formularului de înregistrare aici: http://wordpress.org/support/topic/plugin-user-photo-registration-usage?replies=1#post-2721403. Cine știe..

Aș trece de la utilizarea datelor FILES și post, la utilizarea API-urilor WordPress pentru fișierele tale. Astfel, în loc de un filepath, vei obține ID-ul unui tip de postare attachment și poți reduce tot codul tău de upload la câteva apeluri de funcții care fac totul automat. Apoi, când vrei să afișezi 'avatarul' tău, folosește pur și simplu funcțiile pentru imagini attachment care sunt folosite peste tot

hai să continuăm această discuție în chat

Vă mulțumesc tuturor pentru sugestii. În final am ales integrarea Woothemes Media Uploader, așa cum puteți vedea aici pe Github: https://github.com/devinsays/options-framework-plugin/blob/master/options-medialibrary-uploader.php Este integrat într-un cadru de tematică pe care îl integrez în propria mea temă, astfel încât să pot omorî doi iepuri dintr-o lovitură.
