Înlocuiește Gravatar cu imagini încărcate?
Am adăugat funcționalitatea de încărcare a pozei de profil urmărind ACEST ghid.
Nu pot găsi un ghid online sau documentație despre hook-urile WP.. Cum să înlocuiesc pozele de profil Gravatar (din secțiunea de comentarii) cu imagini personalizate încărcate?
Nu vreau să îmi forțez utilizatorii să se înregistreze pe Gravatar pentru a-și schimba poza de profil pe site-ul meu.
Presupunând că utilizatorul are avatarul salvat, ca ID al unui atașament, stocat în metadatele utilizatorului, în câmpul field_with_custom_avatar_id
, puteți face următoarele pentru a afișa acel atașament dacă valoarea este salvată:
add_filter( 'get_avatar', 'slug_get_avatar', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
// Dacă este email, încercăm să găsim ID-ul utilizatorului
if( ! is_numeric( $id_or_email ) && is_email( $id_or_email ) ){
$user = get_user_by( 'email', $id_or_email );
if( $user ){
$id_or_email = $user->ID;
}
}
// Dacă nu este ID de utilizator, returnăm avatarul implicit
if( ! is_numeric( $id_or_email ) ){
return $avatar;
}
// Căutăm ID-ul atașamentului salvat în metadatele utilizatorului
$saved = get_user_meta( $id_or_email, 'field_with_custom_avatar_id', true );
if( 0 < absint( $saved ) ) {
// Returnăm imaginea salvată
return wp_get_attachment_image( $saved, [ $size, $size ], false, ['alt' => $alt] );
}
// Returnăm avatarul normal
return $avatar;
}
Sau, dacă avatarul este salvat ca URL al imaginii, în câmpul de metadate al utilizatorului field_with_custom_avatar
-
add_filter( 'get_avatar', 'slug_get_avatar', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
// Dacă este email, încercăm să găsim ID-ul utilizatorului
if( ! is_numeric( $id_or_email ) && is_email( $id_or_email ) ){
$user = get_user_by( 'email', $id_or_email );
if( $user ){
$id_or_email = $user->ID;
}
}
// Dacă nu este ID de utilizator, returnăm avatarul implicit
if( ! is_numeric( $id_or_email ) ){
return $avatar;
}
// Căutăm URL-ul avatarului salvat în metadatele utilizatorului
$saved = get_user_meta( $id_or_email, 'field_with_custom_avatar', true );
// Verificăm dacă este un URL valid
if( filter_var( $saved, FILTER_VALIDATE_URL ) ) {
// Returnăm imaginea salvată
return sprintf( '<img src="%" alt="%" />', esc_url( $saved ), esc_attr( $alt ) );
}
// Returnăm avatarul normal
return $avatar;
}

... temutul $id_or_email
;-) Sperăm să-l facem mai ușor de gestionat, cu modificările propuse în #41544.

Filtrul de care ai nevoie este get_avatar
filter. Acesta returnează elementul HTML imagine care reprezintă avatarul utilizatorului.
add_filter( 'get_avatar', 'cyb_get_avatar', 10, 5 );
function cyb_get_avatar( $avatar = '', $id_or_email, $size = 96, $default = '', $alt = '' ) {
// Înlocuiește $avatar cu propriul tău element imagine, de exemplu
// $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"
return $avatar;
}
Reține că folosind acest filtru, poți în continuare să lași utilizatorii să folosească gravatar. Poți verifica dacă utilizatorul a încărcat un avatar pe site-ul tău, apoi să-l folosești, iar dacă nu, returnezi $avatar
normal, care va fi de la gravatar dacă utilizatorul are unul. (Dacă adaugi la întrebare codul pe care îl folosești pentru a stoca avatarele utilizatorilor, pot oferi un cod exact funcțional):
add_filter( 'get_avatar', 'cyb_get_avatar', 10, 5 );
function cyb_get_avatar( $avatar = '', $id_or_email, $size = 96, $default = '', $alt = '' ) {
if( "user_has_uploaded_a_local_avatar" ) {
// Înlocuiește $avatar cu propriul tău element imagine, de exemplu
// $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"
}
// dacă utilizatorul nu a încărcat un avatar local,
// se va folosi avatarul normal, care poate fi de la gravatar
return $avatar;
}

Acesta este un comentariu "și eu", dar cu o soluție :)
Când am activat secțiunea de comentarii, am primit o eroare de la is_email($id_or_email)
.
Iată eroarea
strlen() așteaptă ca parametrul 1 să fie un șir de caractere, dar a primit un obiect în /home/my_theme/public_html/wp-includes/formatting.php pe linia 2891
Eroarea apare deoarece $id_or_email
conține de fapt un obiect și nu un șir de caractere.
Am găsit o soluție prin extragerea șirului de email din obiect $id_or_email->comment_author_email
Așadar, am înlocuit $id_or_email
cu $id_or_email->comment_author_email
și acum primesc imaginea corectă a avatarului pentru comentarii fără erori.

Ar trebui să editați răspunsul dumneavoastră pentru claritate. Când am început să citesc acest lucru, aproape că părea că nu este un răspuns, ci mai degrabă o problemă "și eu". Astfel, aproape că l-am marcat ca nefiind un răspuns. Ați putea edita acest lucru pentru a fi mai direct în abordarea unei întrebări mai vechi. Întrebările mai vechi au adesea nevoie de răspunsuri actualizate pe măsură ce codul continuă să evolueze, așa că este cu siguranță normal să adăugați răspunsuri târzii - doar asigurați-vă că este clar că asta este ;-) (Și bun venit la WPSE)

Dacă ai setat o imagine de profil personalizată sau încărcată și trebuie să o vezi în front-end, poți folosi funcția de mai jos.
<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?>
Dacă trebuie să schimbi gravatarul cu o imagine de profil personalizată, poți consulta linkul de mai jos: http://www.wpbeginner.com/wp-tutorials/how-to-change-the-default-gravatar-on-wordpress/
