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
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; }
if(!empty($comment->user_id))
parif($comment->user_id > 0)
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.