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
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; }
if(!empty($comment->user_id))
tilif($comment->user_id > 0)
comment_author_email
er registreret til en nuværende bruger. Hvis det er tilfældet, griber du resten af brugerdataene på den måde.