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
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; }
if(!empty($comment->user_id))
tilif($comment->user_id > 0)
comment_author_email
er registrert for en nåværende bruker. I så fall griper du resten av brukerdataene på den måten.