댓글 작성자 표시 이름 변경

댓글 작성자 이름 (또는 WooCommerce의 리뷰 작성자)을 이름 성 이니셜 ( 예 : “John Doe”의 경우 “John D.”).

function.php에서 다음 코드를 사용하여 대부분의 방법을 얻었지만 어떤 이유에서인지 (아마도 댓글 / 리뷰가 제출 됨) 리뷰의 일부 (전체가 아님)에서 이름을 비우고 마침표 ( “.”)로 대체하는 경향이 있습니다.

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

그러나 대체로 이와 같이 코드를 수정하면 항상 전체 이름이 표시됩니다.

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

데이터베이스에 실제 이름을 남겨두고 싶습니다. 그대로, 댓글을 위해 사이트의 공개 측에서 출력을 필터링하기 만하면됩니다 (다른 곳에 표시하려면 이름이 필요할 수 있지만 댓글 작성자가 올바르게 표시 할 때까지 실제로 테스트 할 수 없습니다).

답변

“NOT”이 누락되었습니다. if 문에서 논리 연산자 (!). “댓글 작성자가 비어 있지 않은 경우”라고 말하고 싶습니다. 현재이 함수는 작성자가 비어 있지 않다는 것을 읽고 작성자의 전체 이름을 출력하도록 지시하는 else 문을 기본값으로 사용합니다. 두 번째 코드 블록을 사용하되 다음과 같이 변경하십시오.

다음 변경 :

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

다음으로 :

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

그렇지 않으면 괜찮아 보입니다. 나.

댓글

  • 좋습니다. 잘 작동하지만 일부 이름은 여전히 "로 표시됩니다. 익명의 " 모든 리뷰가 등록 된 사용자에 의해 수행 되었음에도 불구하고 위의 코드를 수정하여 지금은 대체 이름으로 전체 이름을 표시했습니다. 제안 사항이 있습니까?
  • I 이것을 테스트하지는 않았지만 codex 를 보면 get_comment ()-> user_id의 기본값이 0 인 것처럼 보입니다. 사용자가 아닌 사람이 제출 한 경우. if(!empty($comment->user_id))if($comment->user_id > 0)
  • 로 변경해보십시오.

  • 또한 사용자가 로그인하는 동안 댓글을 제출합니다. 그렇지 않은 경우 동일한 자격 증명을 사용하더라도 user_id가 0으로 기록됩니다. ' 먼저 로그인하도록 요구하지 않으려면 간단한 함수를 작성 해야 할 수 있습니다. comment_author_email가 현재 사용자에게 등록되어 있는지 확인하십시오. 그렇다면 나머지 사용자 데이터를 그렇게 수집합니다.
  • (^^^ 사람들이 다른 사용자를 가장하여 댓글을 제출할 수 있으므로 권장하지 않습니다.)

답변

동일한 문제가 있습니다 …

다음은 이에 대한 코드입니다.

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

이름과 성이 있는지 확인하여 출력합니다. 정규 작성자가없는 경우 반환됩니다.

Answer

흠, 몇 분 동안 디버깅하고이 주제를 읽은 후 , 저는 get_user_by () 함수를 사용하는 것이 더 쉽다는 결론에 도달했습니다.

그래서 저는 get_user_by("email",$comment->comment_author_email) 사용자가 로그인하지 않고 댓글 / 리뷰를 보내도 사용자 세부 정보를 가져 왔습니다.

이것은 내 전체 코드입니다

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

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다