Sto cercando di cambiare il nome dellautore del commento (o più specificamente, lautore della recensione in WooCommerce) in Nome Cognome ( ad esempio, “John D.” per “John Doe”).
Ci sono arrivato quasi tutto con il seguente codice in functions.php, ma per qualche motivo (forse a causa di come il commento / recensione è stato inviato) tende a cancellare il nome e sostituirlo con un punto (“.”) in alcune (non tutte) le recensioni.
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; }
Se modifico il codice in questo modo come fallback, tuttavia, viene sempre visualizzato il nome completo:
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; }
Preferirei lasciare i nomi effettivi nel database intatto, e filtra loutput sul lato pubblico del sito per i commenti (potremmo aver bisogno del loro nome completo per essere visualizzato altrove, ma non possiamo verificarlo finché gli autori dei commenti non vengono visualizzati correttamente).
Risposta
Manca un “NOT” operatore logico (!) nellistruzione if. Vuoi dire “se lautore del commento NON È vuoto”. A partire da ora, la funzione sta leggendo che lautore non è vuoto e utilizza per impostazione predefinita la tua istruzione else che gli dice di visualizzare il nome completo dellautore. Usa il secondo blocco di codice ma apporta la seguente modifica.
Modifica quanto segue:
if ( empty($comment->comment_author) ) {
in:
if ( !empty($comment->comment_author) ) {
Altrimenti sembra a posto me.
Commenti
Risposta
Ha avuto lo stesso problema …
Ecco il mio codice per questo:
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; }
Controlla se sono presenti un nome e un cognome e li restituisce. Se non ci sono, viene restituito lautore regolare.
Risposta
Hmm, dopo alcuni minuti di debug e lettura di questo argomento , Sono giunto alla conclusione che è più facile utilizzare la funzione get_user_by ()
Quindi ho utilizzato get_user_by("email",$comment->comment_author_email)
e sono riuscito a ottenere i dettagli dellutente anche se il commento / recensione viene inviato senza che lutente abbia effettuato laccesso.
Questo è il mio codice completo
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))
inif($comment->user_id > 0)
comment_author_email
è registrato per un utente corrente. Se è così, prendi il resto dei dati dellutente in questo modo.