댓글 작성자 이름 (또는 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) ) {
그렇지 않으면 괜찮아 보입니다. 나.
댓글
답변
동일한 문제가 있습니다 …
다음은 이에 대한 코드입니다.
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; }
if(!empty($comment->user_id))
를if($comment->user_id > 0)
로 변경해보십시오.
comment_author_email
가 현재 사용자에게 등록되어 있는지 확인하십시오. 그렇다면 나머지 사용자 데이터를 그렇게 수집합니다.