コメント作成者名(より具体的には、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) ) {
それ以外の場合は、問題ないように見えます私。
コメント
回答
同じ問題が発生しました…
そのためのコードは次のとおりです:
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; }
if(!empty($comment->user_id))
をif($comment->user_id > 0)
に変更してみてください。
comment_author_email
が現在のユーザーに登録されているかどうかを確認してください。その場合は、残りのユーザーデータをそのように取得します。