Cambiar el nombre para mostrar del autor del comentario

Estoy tratando de cambiar el nombre del autor del comentario (o más específicamente, el autor de la revisión en WooCommerce) para que sea el nombre, el apellido, la inicial ( por ejemplo, «John D.» para «John Doe»).

Llegué a la mayor parte del camino con el siguiente código en functions.php, pero por alguna razón (quizás debido a cómo el comentario / revisión se envió) tiende a dejar en blanco el nombre y reemplazarlo con un punto («.») en algunas (no todas) las reseñas.

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

Sin embargo, si modifico el código de esta manera como alternativa, siempre muestra el nombre 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; } 

Preferiría dejar los nombres reales en la base de datos intacto, y simplemente filtrar la salida en el lado público del sitio para comentarios (es posible que necesitemos su nombre completo para mostrar en otro lugar, pero realmente no podemos probarlo hasta que los autores de los comentarios se muestren correctamente).

Respuesta

Le falta un «NO» operador lógico (!) en su declaración if. Quiere decir «si el autor del comentario NO ESTÁ vacío». A partir de ahora, la función está leyendo que el autor no está vacío y por defecto a su declaración else que le dice que muestre el nombre completo del autor. Utilice el segundo bloque de código pero realice el siguiente cambio.

Cambie lo siguiente:

if ( empty($comment->comment_author) ) { 

por:

if ( !empty($comment->comment_author) ) { 

De lo contrario, parece correcto yo.

Comentarios

  • De acuerdo, funciona muy bien, excepto que algunos nombres todavía aparecen como " Anónimo " a pesar de que todas las revisiones fueron realizadas por usuarios registrados. Modifiqué el código anterior para mostrar el nombre completo como respaldo por ahora … ¿alguna sugerencia?
  • I No he probado esto, pero al mirar el codex , parece que, get_comment () – > user_id por defecto es 0 si lo envía un no usuario. Quizás intente cambiar if(!empty($comment->user_id)) a if($comment->user_id > 0)
  • Además, debe asegurarse de los usuarios inician sesión mientras s enviar los comentarios. Si no es así, tengo entendido que se registrará un user_id de 0 (incluso si usan sus mismas credenciales). Si no ' no desea exigir que inicien sesión primero, es posible que deba escribir una función simple para compruebe si el comment_author_email está registrado para un usuario actual. Si es así, toma el resto de los datos del usuario de esa manera.
  • (^^^ esto no se recomienda, obviamente, ya que las personas podrían enviar comentarios bajo la apariencia de otros usuarios).

Respuesta

Tuve el mismo problema …

Aquí está mi código para eso:

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

Comprueba si hay un nombre y apellido y los muestra. Si no los hay, se devuelve el autor habitual.

Responder

Hmm, después de unos minutos de depuración y lectura de este tema , He llegado a la conclusión de que es más fácil pasar por la función get_user_by ()

Así que pasé por get_user_by("email",$comment->comment_author_email) y logré obtener los detalles del usuario incluso si el comentario / revisión se envía sin que el usuario haya iniciado sesión.

Este es mi 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; } 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *