Schimbați numele afișat al autorului comentariului

Î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

  • OK, funcționează excelent, cu excepția faptului că unele nume încă se întâlnesc ca " " anonim, chiar dacă toate recenziile au fost făcute de utilizatori înregistrați. Am modificat codul de mai sus pentru a afișa numele complet ca rezervă pentru moment … vreo sugestie?
  • Nu am testat acest lucru, dar uitându-ne la codex , se pare că, get_comment () – > user_id implicit la 0 dacă este trimis de un utilizator care nu este utilizator. Poate încercați să schimbați if(!empty($comment->user_id)) în if($comment->user_id > 0)
  • De asemenea, trebuie să vă asigurați că utilizatorii sunt conectați în timp ce s ubmitting comentariile. Dacă nu sunt, înțeleg că un user_id de 0 va fi înregistrat (chiar dacă își utilizează aceleași acreditări). Dacă nu ' nu doriți să cereți să se conecteze mai întâi, trebuie să să scrieți o funcție simplă la verificați dacă comment_author_email este înregistrat la un utilizator curent. Dacă da, preluați restul datelor utilizatorului în acest fel.
  • (^^^ acest lucru nu este recomandat, evident, deoarece oamenii ar putea trimite comentarii sub masca altor utilizatori).

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *