Endre kommentar Forfatter Visningsnavn

Jeg prøver å endre forfatternavnet til kommentaren (eller mer spesifikt, anmelderforfatteren i WooCommerce) til å være fornavn Etternavn ( f.eks. «John D.» for «John Doe»).

Jeg kom det meste av veien dit med følgende kode i functions.php, men av en eller annen grunn (kanskje på grunn av hvordan kommentaren / anmeldelsen ble sendt), har den en tendens til å tømme navnet og erstatte det med en periode («.») i noen (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 slik som en reserve, viser den imidlertid alltid det fulle navnet:

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 foretrekker å legge de faktiske navnene i databasen intakt, og bare filtrer utdataene på den offentlige siden av nettstedet for kommentarer (vi trenger kanskje deres fulle navn for å vises andre steder, men kan ikke teste det helt til kommentarforfatterne viser riktig).

Svar

Du mangler et «NOT» logisk operatør (!) i if-setningen din. Du vil si «hvis kommentarforfatter IKKE er tom». Fra nå av leser funksjonen at forfatteren ikke er tom og som standard er den andre uttalelsen din som ber den sende ut forfatterens fulle navn. Bruk den andre koden, men gjør følgende endring.

Endre følgende:

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

til:

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

Ellers ser det ok ut å meg.

Kommentarer

  • OK, fungerer bra, bortsett fra at noen navn fremdeles kommer over som " Anonym " selv om alle anmeldelser ble gjort av registrerte brukere. Jeg justerte koden ovenfor for å vise fullt navn som reserveløp for øyeblikket … noen forslag?
  • I har ikke testet dette, men ser på codex ser det ut som om get_comment () – > user_id er som standard 0 hvis det sendes inn av en ikke-bruker. Prøv å endre if(!empty($comment->user_id)) til if($comment->user_id > 0)
  • Du må også sørge for at brukere er pålogget mens s gir kommentarer. Hvis de ikke er det, er det min forståelse at en bruker-ID på 0 vil bli logget (selv om de bruker samme legitimasjon). Hvis du ikke vil ' ikke vil kreve at de logger inn først, må du kanskje skrive en enkel funksjon til sjekk om comment_author_email er registrert for en nåværende bruker. I så fall griper du resten av brukerdataene på den måten.
  • (^^^ Dette anbefales selvsagt ikke, da folk kan sende inn kommentarer under dekke av andre brukere).

Svar

Hadde det samme problemet …

Her er koden min 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 sjekker om det er fornavn og etternavn og sender ut disse. Hvis det ikke er den vanlige forfatteren returneres.

Svar

Hmm, etter noen minutter med feilsøking og lesing gjennom dette emnet , Jeg har kommet til at det er lettere å gå gjennom get_user_by () -funksjonen

Så jeg har gått gjennom get_user_by("email",$comment->comment_author_email) og klarte å få brukeropplysningene selv om kommentaren / anmeldelsen sendes uten at brukeren er logget inn.

Dette er min fulle 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; } 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *