it-swarm.com.de

Ändern Sie den Anzeigenamen des Kommentars

Ich versuche, den Autorennamen des Kommentars (oder genauer gesagt den Autor der Rezension in WooCommerce) in Vorname Nachname (z. B. "John D." für "John Doe") zu ändern.

Ich bin mit dem folgenden Code in functions.php den größten Teil des Weges dorthin gekommen, aber aus irgendeinem Grund (möglicherweise aufgrund der Art und Weise, wie der Kommentar/die Rezension eingereicht wurde) wird der Name eher ausgeblendet und durch einen Punkt (".") Ersetzt. in einigen (nicht allen) Bewertungen.

add_filter('get_comment_author', 'my_comment_author', 10, 1);

function my_comment_author( $author = '' ) {
    // Get the comment ID from WP_Query

    $comment = get_comment( $comment_ID );

    if ( empty($comment->comment_author) ) {
        if (!empty($comment->user_id)){
            $user=get_userdata($comment->user_id);
            $author=$user->first_name.' '.substr($user->last_name,0,1).'.'; // this is the actual line you want to change
        } else {
            $author = __('Anonymous');
        }
    } else {
        $user=get_userdata($comment->user_id);
        $author=$user->first_name.' '.substr($user->last_name,0,1).'.'; // this is the actual line you want to change
    }
    return $author;
}

Wenn ich den Code wie folgt als Fallback ändere, wird immer der vollständige Name angezeigt:

add_filter('get_comment_author', 'my_comment_author', 10, 1);

function my_comment_author( $author = '' ) {
    // Get the comment ID from WP_Query

    $comment = get_comment( $comment_ID );

    if ( empty($comment->comment_author) ) {
        if (!empty($comment->user_id)){
            $user=get_userdata($comment->user_id);
            $author=$user->first_name.' '.substr($user->last_name,0,1).'.'; // this is the actual line you want to change
        } else {
            $author = __('Anonymous');
        }
    } else {
        $author = $comment->comment_author;
    }

    return $author;
}

Ich würde es vorziehen, die tatsächlichen Namen in der Datenbank intakt zu lassen und nur die Ausgabe auf der öffentlich zugänglichen Seite der Site nach Kommentaren zu filtern (wir benötigen möglicherweise ihren vollständigen Namen, um ihn an einer anderen Stelle anzuzeigen, können ihn jedoch erst nach dem Kommentar testen Autoren werden korrekt angezeigt).

6
Web Builder

In Ihrer if-Anweisung fehlt ein logischer Operator "NOT" (!). Sie möchten sagen, dass der Kommentar author IS NICHT leer ist. Derzeit liest die Funktion, dass der Autor nicht leer ist, und verwendet standardmäßig Ihre else-Anweisung, die ihn auffordert, den vollständigen Namen des Autors auszugeben. Verwenden Sie den zweiten Codeblock, nehmen Sie jedoch die folgenden Änderungen vor.

Ändern Sie Folgendes:

if ( empty($comment->comment_author) ) {

zu:

if ( !empty($comment->comment_author) ) {

Ansonsten sieht es für mich ok aus.

Hatte das gleiche Problem ...

Hier ist mein Code dafür:

add_filter( 'comment_author', 'custom_comment_author', 10, 2 );

function custom_comment_author( $author, $commentID ) {

    $comment = get_comment( $commentID );
    $user = get_user_by( 'email', $comment->comment_author_email );

    if( !$user ):

        return $author;

    else:

        $firstname = get_user_meta( $user->id, 'first_name', true );
        $lastname = get_user_meta( $user->id, 'last_name', true );

        if( empty( $firstname ) OR empty( $lastname ) ):

            return $author;

        else:

            return $firstname . ' ' . $lastname;

        endif;

    endif;

}

Es prüft, ob Vor- und Nachname vorhanden sind und gibt diese aus. Wenn nicht, wird der reguläre Autor zurückgegeben.

1
GDY

Hmm, nach ein paar Minuten Debuggen und Lesen dieses Themas bin ich zu dem Schluss gekommen, dass es einfacher ist, die Funktion get_user_by () zu durchlaufen

Daher habe ich get_user_by('email',$comment->comment_author_email) durchlaufen und es geschafft, die Benutzerdetails abzurufen, auch wenn der Kommentar/die Bewertung gesendet wurde, ohne dass der Benutzer angemeldet war.

Das ist mein vollständiger Code

add_filter('get_comment_author', 'comments_filter_uprise', 10, 1);

function comments_filter_uprise( $author = '' ) {
    $comment = get_comment( $comment_author_email );

    if ( !empty($comment->comment_author_email) ) {
        if (!empty($comment->comment_author_email)){
            $user=get_user_by('email', $comment->comment_author_email);
            $author=$user->first_name.' '.substr($user->last_name,0,1).'.';
        } else {
            $user = get_user_by( 'email', $comment->comment_author_email );
            $author = $user->first_name;
        }
    } else {
        $user=get_userdata($comment->user_id);
        $author=$user->first_name.' '.substr($user->last_name,0,1).'.';
        $author = $comment->comment_author;
    }
    return $author;
}
0
Eduard