Înlocuiește Gravatar cu imagini încărcate?

23 nov. 2015, 07:14:35
Vizualizări: 22K
Voturi: 5

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.

6
Comentarii

Ai luat în considerare Buddypress?

Dan Alexander Dan Alexander
23 nov. 2015 08:38:53

deci preferi să-i obligi potențial să încarce o imagine pe fiecare site? Nu sunt un fan al gravatar, dar acesta este exact singura (și singura) problemă pe care o rezolvă.

Mark Kaplun Mark Kaplun
23 nov. 2015 10:37:23

@MarkKaplun folosind filtrul get_avatar, utilizatorii pot folosi în continuare gravatar. Vezi răspunsul meu. De obicei nu recomand plugin-uri terțe, cu atât mai puțin dacă nu au fost actualizate de mult timp, dar local simple avatar face o treabă bună și adaugă și evaluări ale audienței pentru avatarurile locale, oferind o soluție completă. Poate fi un punct de plecare foarte bun pentru propriul tău plugin.

cybmeta cybmeta
23 nov. 2015 12:05:48

@cybmeta, sigur că este posibil și util, dar pun la îndoială logica de a face acest lucru în contextul întrebării. Probabil este mai ușor să obții o imagine pe Gravatar decât orice implementare pe care @Noob o va folosi. Dacă motivul nu este legat de confidențialitate sau moderare, atunci nu văd cum o soluție locală poate fi mai bună decât Gravatar. Pentru mine, astăzi are mai mult sens să lași utilizatorul să folosească avatarul de pe FB, Twitter sau Google dacă principala ta preocupare este doar confortul utilizatorului..

Mark Kaplun Mark Kaplun
23 nov. 2015 12:19:12

Nimeni nu a spus că este mai bine ;). Personal, îmi place ideea de a nu forța utilizatorii tăi să folosească un serviciu terț, Gravatar, Facebook sau oricare altul, dacă doresc să aibă o experiență completă pe site-ul tău. Desigur, folosirea serviciilor rețelelor sociale populare poate fi un avantaj pentru site-ul tău, dar oferă și o experiență completă utilizatorilor tăi. Nu este mai bine sau mai rău, doar o alegere pe care o putem lua ca proprietari ai website-ului. Și contextul întrebării nu era să forțeze încărcarea avatarurilor locale, ci dimpotrivă, să nu forțeze utilizarea Gravatar (poate fi extins la a nu forța utilizarea unui serviciu terț).

cybmeta cybmeta
23 nov. 2015 12:23:56

Mulțumesc băieților pentru răspunsurile și discuțiile voastre! Le voi procesa și încerca în curând. Am motivele mele pentru a nu folosi Gravatar.

N00b N00b
23 nov. 2015 23:14:49
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 4
2

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;

}
16 nov. 2017 17:14:25
Comentarii

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

birgire birgire
16 nov. 2017 18:47:51

Salut. Am implementat snippet-ul tău pentru filtrul get_avatar_url. Funcționează peste tot, cu excepția comment_list. Aruncă eroarea strlen() expects parameter 1 to be string, object given in /home/my_theme/public_html/wp-includes/formatting.php on line 2891

wpdev wpdev
25 dec. 2018 15:34:04
0

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;

}
23 nov. 2015 11:45:57
2

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.

8 ian. 2019 20:52:49
Comentarii

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)

butlerblog butlerblog
8 ian. 2019 21:50:36

Da, am încercat să scriu asta mai întâi ca un comentariu pentru bilimokur, dar am nevoie de 50 de puncte de reputație pentru a putea comenta :( Voi edita acest lucru pentru a clarifica că este de fapt un comentariu "și eu", dar cu o soluție :)

atonus atonus
8 ian. 2019 22:38:26
1
-2

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/

23 nov. 2015 07:53:10
Comentarii

votat în jos deoarece practic răspunsul este "citește o resursă externă", care ar putea fi utilă la momentul scrierii, dar nu va fi disponibilă mai târziu. Răspunsurile ar trebui să fie cât mai autosuficiente posibil.

Mark Kaplun Mark Kaplun
16 nov. 2017 17:46:47