Sostituire Gravatar con immagini caricate?

23 nov 2015, 07:14:35
Visualizzazioni: 22K
Voti: 5

Ho aggiunto la funzionalità per caricare l'immagine del profilo seguendo QUESTA guida.

Non riesco a trovare una guida online o documentazione sugli hook di WP.. Come sostituire le immagini del profilo Gravatar (nella sezione commenti) con immagini personalizzate caricate?

Non voglio costringere i miei utenti a registrarsi su Gravatar per cambiare la loro immagine del profilo sul mio sito.

6
Commenti

Hai considerato Buddypress?

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

quindi preferisci costringerli potenzialmente a caricare un'immagine su ogni sito? Non sono un fan di gravatar ma questo è esattamente l'unico (e unico) problema che risolve.

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

@MarkKaplun utilizzando il filtro get_avatar, gli utenti possono ancora usare gravatar. Vedi la mia risposta. Di solito non consiglio plugin di terze parti, ancora meno se non viene aggiornato da molto tempo, ma local simple avatar fa un buon lavoro e aggiunge anche valutazioni del pubblico agli avatar locali fornendo una soluzione completa. Può essere un ottimo punto di partenza per il tuo plugin.

cybmeta cybmeta
23 nov 2015 12:05:48

@cybmeta, certo che è possibile e utile, metto solo in discussione la logica di farlo nel contesto della domanda. Probabilmente è più semplice ottenere un'immagine su Gravatar rispetto a qualsiasi implementazione che @ Noob potrebbe usare. Se la ragione non è legata alla privacy o alla moderazione, non vedo come una soluzione locale possa essere migliore di Gravatar. Oggi, per me ha più senso lasciare che l'utente utilizzi il suo avatar di Facebook, Twitter o Google se la tua preoccupazione principale è semplicemente la comodità dell'utente.

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

Nessuno ha detto che sia migliore ;). Personalmente mi piace l'idea di non obbligare gli utenti a utilizzare un servizio di terze parti, Gravatar, Facebook o qualsiasi altro, se vogliono avere un'esperienza completa sul tuo sito. Ovviamente utilizzare i servizi dei social network più popolari può essere un vantaggio per il tuo sito, ma offrire un'esperienza completa ai tuoi utenti è altrettanto importante. Non è migliore o peggiore, è solo una scelta che possiamo fare come proprietari del sito web. E il contesto della domanda non era quello di obbligare a caricare avatar locali, era il contrario, di non obbligare a usare Gravatar (si può estendere a non obbligare l'uso di un servizio di terze parti).

cybmeta cybmeta
23 nov 2015 12:23:56

Grazie ragazzi per le vostre risposte e discussioni! Le elaborerò e le proverò presto. Ho le mie ragioni per non usare Gravatar.

N00b N00b
23 nov 2015 23:14:49
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
2

Supponendo che l'utente abbia salvato il proprio avatar, come ID di un allegato, memorizzato nei metadati utente nel campo field_with_custom_avatar_id, puoi fare così per mostrare quell'allegato se il valore è salvato:

add_filter( 'get_avatar', 'slug_get_avatar', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

    //Se è un'email, prova a trovare l'ID utente
    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;
        }
    }

    //se non è un ID utente, restituisci
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Trova l'ID dell'allegato salvato nei metadati utente
    $saved = get_user_meta( $id_or_email, 'field_with_custom_avatar_id', true );
    if( 0 < absint( $saved ) ) {
        //restituisci l'immagine salvata
        return wp_get_attachment_image( $saved, [ $size, $size ], false, ['alt' => $alt] );
    }

    //restituisci l'avatar normale
    return $avatar;

}

Oppure, se è salvato come URL dell'immagine, nel campo dei metadati utente field_with_custom_avatar -

add_filter( 'get_avatar', 'slug_get_avatar', 10, 5 );
function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {

    //Se è un'email, prova a trovare l'ID utente
    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;
        }
    }

    //se non è un ID utente, restituisci
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Trova l'URL dell'avatar salvato nei metadati utente
    $saved = get_user_meta( $id_or_email, 'field_with_custom_avatar', true );
    //verifica se è un URL
    if( filter_var( $saved, FILTER_VALIDATE_URL ) ) {
        //restituisci l'immagine salvata
        return sprintf( '<img src="%" alt="%" />', esc_url( $saved ), esc_attr( $alt ) );
    }

    //restituisci l'avatar normale
    return $avatar;

}
16 nov 2017 17:14:25
Commenti

... il temuto $id_or_email ;-) Speriamo di renderlo più facile da gestire, con le modifiche proposte in #41544.

birgire birgire
16 nov 2017 18:47:51

Ciao. Ho creato il tuo snippet per il filtro get_avatar_url. Funziona ovunque tranne che in comment_list. Dice 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 dic 2018 15:34:04
0

L'hook che ti serve è il get_avatar filter. Restituisce l'elemento HTML dell'immagine che rappresenta l'avatar dell'utente.

add_filter( 'get_avatar', 'cyb_get_avatar', 10, 5 );
function cyb_get_avatar( $avatar = '', $id_or_email, $size = 96, $default = '', $alt = '' ) {

    // Sostituisci $avatar con il tuo elemento immagine, ad esempio
    // $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"

    return $avatar;

}

Nota che utilizzando questo filtro, puoi comunque permettere agli utenti di usare gravatar. Potresti verificare se l'utente ha caricato un avatar sul tuo sito, quindi usarlo, altrimenti restituisci il normale $avatar, che sarà da gravatar se l'utente ne ha uno. (Se aggiungi alla domanda il codice che usi per memorizzare gli avatar degli utenti, posso fornirti un codice funzionante esatto):

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" ) {
       // Sostituisci $avatar con il tuo elemento immagine, ad esempio
       // $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"
    }

    // se l'utente non ha caricato un avatar locale,
    // verrà usato l'avatar normale, che può essere da gravatar
    return $avatar;

}
23 nov 2015 11:45:57
2

Questo è un commento "anche io" ma con una soluzione :)

Quando ho abilitato la sezione commenti ho ricevuto un errore da is_email($id_or_email).

Ecco l'errore

strlen() expects parameter 1 to be string, object given in /home/my_theme/public_html/wp-includes/formatting.php on line 2891

L'errore si verifica perché $id_or_email contiene effettivamente un oggetto e non una stringa.

Ho trovato una soluzione recuperando la stringa email dall'oggetto $id_or_email->comment_author_email

Quindi ho cambiato $id_or_email in $id_or_email->comment_author_email e ora ottengo l'immagine dell'avatar corretta per i commenti senza errori.

8 gen 2019 20:52:49
Commenti

Dovresti modificare la tua risposta per maggiore chiarezza. Quando ho iniziato a leggerla, sembrava quasi che non fosse una risposta, ma piuttosto un problema "anche a me". Quindi, ho quasi segnalato che non era una risposta. Potresti modificarla per essere più diretto nel rispondere a una vecchia domanda. Le domande più vecchie spesso necessitano di risposte aggiornate man mano che il codice progredisce, quindi è normale aggiungere risposte tardive - basta renderlo chiaro ;-) (E benvenuto su WPSE)

butlerblog butlerblog
8 gen 2019 21:50:36

Sì, ho provato a scrivere prima come commento a bilimokur, ma mi servono 50 punti reputazione per poter commentare :( Modificherò per chiarire che in realtà è un commento "anche a me" ma con una soluzione :)

atonus atonus
8 gen 2019 22:38:26
1
-2

Se hai impostato un'immagine del profilo personalizzata o caricata e hai bisogno di visualizzarla sul front end, puoi utilizzare la seguente funzione.

<?php echo get_avatar( $id_or_email, $size, $default, $alt, $args ); ?> 

Se devi cambiare il tuo gravatar con un'immagine del profilo personalizzata, puoi fare riferimento al seguente link: http://www.wpbeginner.com/wp-tutorials/how-to-change-the-default-gravatar-on-wordpress/

23 nov 2015 07:53:10
Commenti

votato negativamente perché sostanzialmente la risposta è "vai a leggere qualche risorsa esterna" che potrebbe essere utile al momento della scrittura, ma non disponibile in seguito. Le risposte dovrebbero essere il più possibile autonome.

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