コメント作成者の表示名の変更

コメント作成者名(より具体的には、WooCommerceのレビュー作成者)を名最後のイニシャル(より具体的にはWooCommerceのレビュー作成者)に変更しようとしています。例:「JohnDoe」の「JohnD。」)。

Functions.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ステートメントを使用しています。コードの2番目のブロックを使用しますが、次の変更を加えます。

以下を変更します:

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

to:

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

それ以外の場合は、問題ないように見えます私。

コメント

  • OK、うまく機能しますが、一部の名前はまだ"と表示されます。匿名"すべてのレビューは登録ユーザーによって行われたにもかかわらず、今のところフォールバックとしてフルネームを表示するように上記のコードを微調整しました…何か提案はありますか?
  • 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; } 

名と姓があるかどうかをチェックし、これらを出力します。通常の作成者がいない場合は返されます。

回答

うーん、このトピックを数分間デバッグして読んだ後、「 get_user_by()関数を使用する方が簡単であるという結論に達しました

したがって、

そして、ユーザーがログインせずにコメント/レビューが送信された場合でも、ユーザーの詳細を取得することができました。

これは私の完全なコードです

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です