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