Modifier le nom daffichage de lauteur du commentaire

Jessaie de changer le nom de lauteur du commentaire (ou plus précisément lauteur de la critique dans WooCommerce) pour quil devienne Prénom Nom de famille ( par exemple, « John D. » pour « John Doe »).

Jai fait la plupart du temps avec le code suivant dans functions.php, mais pour une raison quelconque (peut-être à cause de la façon dont le commentaire / la critique a été soumis), il a tendance à masquer le nom et à le remplacer par un point (« . ») dans certains (pas tous) des avis.

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 celui-ci 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 intact, et filtrez simplement la sortie du côté public du site pour les commentaires (nous pourrions avoir besoin de leur nom complet pour lafficher ailleurs, mais ne pouvons pas vraiment le tester tant que les auteurs des commentaires ne saffichent pas correctement).

Réponse

Il vous manque un « NOT » opérateur logique (!) dans votre instruction if. Vous voulez dire « si lauteur du commentaire NEST PAS vide ». À partir de maintenant, la fonction lit que lauteur nest pas vide et utilise par défaut votre instruction else qui lui indique de sortir le nom complet de lauteur. Utilisez le deuxième bloc de code mais apportez la modification suivante.

Modifiez ce qui suit:

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

en:

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

Sinon, cela semble correct moi.

Commentaires

  • OK, fonctionne très bien, sauf que certains noms apparaissent toujours comme " Anonyme " même si tous les avis ont été effectués par des utilisateurs enregistrés. Jai modifié le code ci-dessus pour afficher le nom complet comme solution de secours pour le moment … des suggestions?
  • I Je nai pas testé cela, mais en regardant le codex , il semble que get_comment () – > user_id par défaut à 0 si soumis par un non-utilisateur. Essayez peut-être de remplacer if(!empty($comment->user_id)) par if($comment->user_id > 0)
  • Vous devez également vous assurer que le les utilisateurs sont connectés pendant que s omettre les commentaires. Sils ne le sont pas, je crois comprendre quun user_id de 0 sera enregistré (même sils utilisent les mêmes informations didentification). Si vous ne voulez pas ' exiger quils se connectent dabord, vous devrez peut-être écrire une fonction simple pour vérifiez si le comment_author_email est enregistré pour un utilisateur actuel. Si tel est le cas, vous récupérez le reste des données utilisateur de cette façon.
  • (^^^ ce nest évidemment pas recommandé, car les gens pourraient soumettre des commentaires sous le couvert dautres utilisateurs).

Réponse

Jai eu le même problème …

Voici 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 sil y a un prénom et un nom et les affiche. Sil ny en a pas, lauteur régulier est renvoyé.

Réponse

Hmm, après quelques minutes de débogage et de lecture de ce sujet , Je suis arrivé à la conclusion quil est plus facile de passer par la fonction get_user_by ()

Jai donc utilisé get_user_by("email",$comment->comment_author_email) et a réussi à obtenir les détails de lutilisateur même si le commentaire / lavis est envoyé sans que lutilisateur 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; } 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *