Skift kommentar Forfatter Visningsnavn

Jeg forsøger at ændre kommentarforfatternavnet (eller mere specifikt reviewforfatteren i WooCommerce) til at være fornavn Sidste initial ( fx “John D.” for “John Doe”).

Jeg kom det meste af vejen der med følgende kode i functions.php, men af en eller anden grund (måske på grund af hvordan kommentaren / anmeldelsen blev indsendt), har det en tendens til at udfylde navnet og erstatte det med et punktum (“.”) i nogle (ikke alle) anmeldelser.

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

Hvis jeg tilpasser koden sådan som en reserve, viser den dog altid det fulde navn:

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

Jeg foretrækker at lade de faktiske navne være i databasen intakt, og filtrer bare output på den side, der vender ud mod offentligheden for at få kommentarer (vi har muligvis brug for deres fulde navn for at få vist andre steder, men kan ikke rigtig teste det, indtil forfatterne til kommentaren viser korrekt).

Svar

Du mangler et “NOT” logisk operator (!) i din if-sætning. Du vil sige “hvis kommentarforfatter IKKE er tom”. Fra nu af læser funktionen, at forfatteren ikke er tom, og som standard er din anden erklæring, der fortæller den at sende forfatterens fulde navn. Brug den anden blok med kode, men foretag følgende ændring.

Skift følgende:

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

til:

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

Ellers ser det ok ud at mig.

Kommentarer

  • OK, fungerer godt, bortset fra at nogle navne stadig kommer på tværs af " Anonym " selvom alle anmeldelser blev foretaget af registrerede brugere. Jeg tilpasser koden ovenfor for at vise det fulde navn som tilbagevenden indtil videre … nogen forslag?
  • I har ikke testet dette, men ser man på codex ser det ud som om get_comment () – > user_id er som standard 0 hvis indsendt af en ikke-bruger. Prøv måske at ændre if(!empty($comment->user_id)) til if($comment->user_id > 0)
  • Du skal også sørge for at brugere er logget ind, mens s uden kommentarer. Hvis de ikke er det, er det min forståelse, at en user_id på 0 vil blive logget (selvom de bruger deres samme legitimationsoplysninger). Hvis du ikke ' ikke vil kræve, at de logger ind først, skal du muligvis skrive en simpel funktion til Kontroller, om comment_author_email er registreret til en nuværende bruger. Hvis det er tilfældet, griber du resten af brugerdataene på den måde.
  • (^^^ Dette anbefales naturligvis ikke, da folk kunne indsende kommentarer under dække af andre brugere).

Svar

Havde det samme problem …

Her er mit kode for det:

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

Den kontrollerer, om der er et fornavn og efternavn og udsender disse. Hvis der ikke er den normale forfatter, returneres.

Svar

Hmm, efter et par minutters fejlfinding og læsning gennem dette emne , Jeg er kommet til den konklusion, at det er lettere at gennemgå get_user_by () -funktionen

Så jeg har gennemgået get_user_by("email",$comment->comment_author_email) og formåede at få brugeroplysningerne, selvom kommentaren / anmeldelsen sendes uden at brugeren er logget ind.

Dette er min fulde kode

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *