Încerc să schimb numele autorului comentariului (sau mai precis, autorului recenziei din WooCommerce) pentru a fi prenumele, ultima inițială ( de exemplu, „John D.” pentru „John Doe”).
Am ajuns aproape de tot cu următorul cod în functions.php, dar din anumite motive (poate din cauza modului în care comentariul / recenzia a fost trimis) tinde să elimine numele și să-l înlocuiască cu un punct („.”) în unele (nu toate) recenzii.
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; }
Dacă modificăm codul astfel ca o rezervă, totuși, acesta afișează întotdeauna numele complet:
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; }
Aș prefera să las numele reale în baza de date intact și pur și simplu filtrați rezultatul de pe partea publică a site-ului pentru comentarii (s-ar putea să avem nevoie de numele complet pentru a fi afișat în altă parte, dar nu îl putem testa cu adevărat până când autorii comentariilor nu se afișează corect).
Răspuns
Vă lipsește un „NU” operator logic (!) în declarația dvs. if. Vrei să spui „dacă autorul comentariului NU este gol”. Începând de acum, funcția citește că autorul nu este gol și implicit în afirmația dvs. else care îi spune să scoată numele complet al autorului. Utilizați al doilea bloc de cod, dar efectuați următoarea modificare.
Schimbați următoarele:
if ( empty($comment->comment_author) ) {
în:
if ( !empty($comment->comment_author) ) {
În caz contrar, pare bine eu.
Comentarii
Răspuns
A avut aceeași problemă …
Iată fragmentul meu de cod pentru asta:
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; }
Verifică dacă există un prenume și prenume și le afișează. Dacă nu există, autorul obișnuit este returnat.
Răspunde
Hmm, după câteva minute de depanare și citire a acestui subiect , Am ajuns la concluzia că este mai ușor de parcurs funcția get_user_by ()
Așa că am trecut prin get_user_by("email",$comment->comment_author_email)
și a reușit să obțină detaliile utilizatorului chiar dacă comentariul / recenzia este trimis fără ca utilizatorul să fie conectat.
Acesta este codul meu complet
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))
înif($comment->user_id > 0)
comment_author_email
este înregistrat la un utilizator curent. Dacă da, preluați restul datelor utilizatorului în acest fel.