Ändra kommentar Författarens visningsnamn

Jag försöker ändra kommentarförfattarens namn (eller mer specifikt recensionsförfattaren i WooCommerce) så att det blir Förnamn Senaste initial t.ex. ”John D.” för ”John Doe”).

Jag kom det mesta av vägen dit med följande kod i functions.php, men av någon anledning (kanske på grund av hur kommentaren / recensionen skickades) tenderar det att tömma ut namnet och ersätta det med en punkt (”.”) i vissa (inte alla) recensioner.

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

Om jag justerar koden så här som en reserv, visar den alltid hela namnet:

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

Jag föredrar att lämna de faktiska namnen i databasen intakt, och filtrera bara utdata på den offentliga sidan av webbplatsen för kommentarer (vi kan behöva deras fullständiga namn för att visas någon annanstans, men kan inte riktigt testa det tills kommentarförfattarna visar korrekt).

Svar

Du saknar ett ”NOT” logisk operatör (!) i ditt if-uttalande. Du vill säga ”om författaren till kommentar INTE är tom”. Från och med nu läser funktionen att författaren inte är tom och standardinstallerar ditt annat uttalande som säger att den ska skriva ut författarens fullständiga namn. Använd det andra kodblocket men gör följande ändring.

Ändra följande:

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

till:

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

Annars ser det bra ut att mig.

Kommentarer

  • OK, fungerar bra, förutom att vissa namn fortfarande stöter på som " Anonym " även om alla recensioner gjordes av registrerade användare. Jag justerade koden ovan för att visa fullständigt namn som reserv för nu … några förslag?
  • I har inte testat detta, men när man tittar på codex verkar det som om get_comment () – > user_id är som standard 0 om det skickas av en icke-användare. Försök kanske ändra if(!empty($comment->user_id)) till if($comment->user_id > 0)
  • Du måste också se till att användare är inloggade medan s lämnar kommentarer. Om de inte är det, är det min uppfattning att en user_id på 0 kommer att loggas (även om de använder samma referenser). Om du inte ' inte vill kräva att de loggar in först kan du behöva skriva en enkel funktion till kontrollera om comment_author_email är registrerad för en nuvarande användare. Om så är fallet, tar du resten av användardata på det sättet.
  • (^^^ detta rekommenderas självklart inte, eftersom folk kan skicka kommentarer under sken av andra användare).

Svar

Hade samma problem …

Här är min kod för 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; } 

Det kontrolleras om det finns ett förnamn och efternamn och matar ut dessa. Om det inte finns den vanliga författaren returneras.

Svar

Hmm, efter några minuters felsökning och läsning genom detta ämne Jag har kommit till slutsatsen att det är lättare att gå igenom get_user_by () -funktionen

Så jag har gått igenom get_user_by("email",$comment->comment_author_email) och lyckades få användaruppgifterna även om kommentaren / recensionen skickas utan att användaren är inloggad.

Detta är min fullständiga kod

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *