Estou tentando alterar o nome do autor do comentário (ou mais especificamente, o autor da revisão em WooCommerce) para o nome Sobrenome inicial ( por exemplo, “John D.” para “John Doe”).
Cheguei lá com o seguinte código em functions.php, mas por algum motivo (talvez por causa de como o comentário / revisão foi enviado), ele tende a deixar o nome em branco e a substituí-lo por um ponto (“.”) em algumas (não em todas) as avaliações.
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 eu ajustar o código como este como substituto, no entanto, ele sempre exibirá o 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; }
Eu preferiria deixar os nomes reais no banco de dados intacta e apenas filtrar a saída no lado público do site para comentários (podemos precisar que seu nome completo seja exibido em outro lugar, mas não podemos realmente testá-lo até que os autores do comentário sejam exibidos corretamente).
Resposta
Está faltando um “NÃO” operador lógico (!) em sua instrução if. Você quer dizer “se o autor do comentário NÃO ESTÁ vazio”. A partir de agora, a função está lendo que o autor não está vazio e padronizando para sua instrução else que diz a ele para produzir o nome completo do autor. Use o segundo bloco de código, mas faça a seguinte alteração.
Altere o seguinte:
if ( empty($comment->comment_author) ) {
para:
if ( !empty($comment->comment_author) ) {
Caso contrário, parece ok para eu.
Comentários
Resposta
Tive o mesmo problema …
Aqui está meu código para isso:
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; }
Ele verifica se há um nome e sobrenome e os exibe. Se não houver, o autor regular é retornado.
Resposta
Hmm, após alguns minutos de depuração e leitura deste tópico , Cheguei à conclusão de que é mais fácil passar pela função get_user_by ()
Então, passei pela função get_user_by("email",$comment->comment_author_email)
e conseguiu obter os detalhes do usuário mesmo se o comentário / revisão for enviado sem o usuário estar conectado.
Este é meu código 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))
paraif($comment->user_id > 0)
comment_author_email
está registrado para um usuário atual. Nesse caso, você obtém o resto dos dados do usuário dessa forma.