Modifica il nome visualizzato dellautore del commento

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

  • OK, funziona benissimo, tranne per il fatto che alcuni nomi continuano a essere " Anonimo " anche se tutte le revisioni sono state fatte da utenti registrati. Ho modificato il codice sopra per mostrare il nome completo come riserva per ora … qualche suggerimento?
  • I non lha testato, ma guardando il codex sembra che get_comment () – > user_id il valore predefinito è 0 se inviato da un non utente. Forse prova a cambiare if(!empty($comment->user_id)) in if($comment->user_id > 0)
  • Inoltre, devi assicurarti che il gli utenti sono connessi mentre s trasmettere i commenti. In caso contrario, è mia comprensione che un user_id di 0 verrà registrato (anche se utilizzano le stesse credenziali). Se ' non vuoi richiedere che accedano prima, potresti dover scrivere una semplice funzione per controlla se comment_author_email è registrato per un utente corrente. Se è così, prendi il resto dei dati dellutente in questo modo.
  • (^^^ questo non è raccomandato, ovviamente, poiché le persone potrebbero inviare commenti sotto le spoglie di altri utenti).

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *