web-dev-qa-db-fra.com

Modifier le commentaire Auteur Nom d'affichage

J'essaie de changer le nom de l'auteur du commentaire (ou plus précisément l'auteur de la critique dans WooCommerce) en Prénom Dernière (par exemple, "John D." pour "John Doe").

Le fichier suivant contient le code suivant dans functions.php, mais pour une raison quelconque (peut-être en raison de la façon dont le commentaire/la critique a été soumis), il a tendance à effacer le nom et à le remplacer par un point (".") dans certains (pas tous) des commentaires.

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;
}

Si je modifie le code comme ceci comme solution de secours, il affiche toujours le nom complet:

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;
}

Je préférerais laisser les noms réels dans la base de données intacts et filtrer simplement la sortie du côté public du site pour commentaires (nous aurons peut-être besoin de leur nom complet pour les afficher ailleurs, mais nous ne pourrons pas vraiment le tester avant le commentaire. les auteurs affichent correctement).

6
Web Builder

Il vous manque un opérateur logique "NOT" (!) Dans votre instruction if. Vous voulez dire "si l'auteur du commentaire IS N'EST PAS vide". Pour le moment, la fonction lit que l'auteur n'est pas vide et utilise par défaut votre instruction else qui lui indique de générer le nom complet de l'auteur. Utilisez le deuxième bloc de code, mais apportez les modifications suivantes.

Changer ce qui suit:

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

à:

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

Sinon, ça me va.

3
Roman Candle Thoughts

Avait le même problème ...

Heres mon morceau de code pour cela:

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;

}

Il vérifie s'il existe un prénom et un nom de famille et les affiche. S'il n'y en a pas, l'auteur régulier est renvoyé.

1
GDY

Hmm, après quelques minutes de débogage et de lecture de ce sujet, j'en suis venu à la conclusion qu'il est plus facile de parcourir get_user_by () function

Je suis donc passé par get_user_by('email',$comment->comment_author_email) et ai réussi à obtenir les détails de l’utilisateur même si le commentaire/la critique est envoyé sans que l’utilisateur soit connecté.

Ceci est mon code complet

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