it-swarm.com.de

Gravatar durch hochgeladene Bilder ersetzen?

Ich habe Funktionen zum Hochladen von Profilbildern hinzugefügt, indem ich DIESER Anleitung folge.

Ich kann keine Online-Anleitung oder Dokumentation zu WP Hooks finden. Wie ersetze ich Gravatar-Profilbilder (im Kommentarbereich) durch benutzerdefinierte hochgeladene Bilder?

Ich möchte meine Benutzer nicht zwingen, Gravatar zu registrieren, um ihr Profilbild auf meiner Website zu ändern.

2
N00b

Unter der Annahme, dass der Avatar des Benutzers als ID eines Anhangs gespeichert ist und in der Benutzermeta als Feld field_with_custom_avatar_id gespeichert ist, können Sie dies tun, um diesen Anhang anzuzeigen, wenn der Wert gespeichert ist:

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

    //If is email, try and find user ID
    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;
        }
    }

    //if not user ID, return
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Find ID of attachment saved user meta
    $saved = get_user_meta( $id_or_email, 'field_with_custom_avatar_id', true );
    if( 0 < absint( $saved ) ) {
        //return saved image
        return wp_get_attachment_image( $saved, [ $size, $size ], false, ['alt' => $alt] );
    }

    //return normal
    return $avatar;

}

Oder, wenn es als URL des Bildes gespeichert ist, im Benutzer-Metafeld field_with_custom_avatar -

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

    //If is email, try and find user ID
    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;
        }
    }

    //if not user ID, return
    if( ! is_numeric( $id_or_email ) ){
        return $avatar;
    }

    //Find URL of saved avatar in user meta
    $saved = get_user_meta( $id_or_email, 'field_with_custom_avatar', true );
    //check if it is a URL
    if( filter_var( $saved, FILTER_VALIDATE_URL ) ) {
        //return saved image
        return sprintf( '<img src="%" alt="%" />', esc_url( $saved ), esc_attr( $alt ) );
    }

    //return normal
    return $avatar;

}
5
JPollock

Der Haken, den Sie brauchen, ist der get_avatar filter . Das Bild-HTML-Element, das den Benutzeravatar darstellt, wird zurückgegeben.

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

    // Replace $avatar with your own image element, for example
    // $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"

    return $avatar;

}

Beachten Sie, dass Sie mit diesem Filter weiterhin die Verwendung von Gravatar zulassen können. Sie können überprüfen, ob der Benutzer einen Avatar auf Ihre Website hochgeladen hat, und ihn dann verwenden. Sie geben keinen normalen $avatar zurück, der von gravatar stammt, wenn der Benutzer einen hat. (Wenn Sie den Code, den Sie zum Speichern von Benutzeravataren verwenden, in Frage stellen, kann ich einen genauen Arbeitscode angeben.):

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" ) {
       // Replace $avatar with your own image element, for example
       // $avatar = "<img alt='$alt' src='your_new_avatar_url' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"
    }

    // if user didn't upload a local avatar,
    // normal avatar will be used, which can be from gravatar
    return $avatar;

}
4
cybmeta

Dies ist ein "Ich auch" Kommentar, aber mit einer Lösung :)

Als ich also den Kommentarbereich aktiviert habe, habe ich einen Fehler von is_email($id_or_email) erhalten.

Hier ist der Fehler

strlen () erwartet, dass Parameter 1 ein String ist, ein Objekt, das in /home/my_theme/public_html/wp-includes/formatting.php in Zeile 2891 angegeben ist

Der Fehler tritt auf, weil $id_or_email tatsächlich ein Objekt und keine Zeichenfolge enthält.

Ich habe eine Problemumgehung gefunden, indem ich eine E-Mail-Zeichenfolge aus dem Objekt $id_or_email->comment_author_email abgerufen habe.

Also habe ich $id_or_email in $id_or_email->comment_author_email geändert und jetzt bekomme ich das richtige Avatar-Bild zu den Kommentaren und keine Fehler.

0
atonus