web-dev-qa-db-ja.com

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

コメントの著者名(またはより具体的にはWooCommerceのレビュー投稿者)を名字の姓(例: "John Doe"の "John D.")に変更しようとしています。

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

データベース内の実際の名前はそのまま残し、コメントを公開するためにサイトの公開側で出力をフィルタリングすることをお勧めします(他の場所に表示するにはフルネームが必要ですが、コメントが表示されるまで実際にテストできません)。作者は正しく表示されています)。

6
Web Builder

Ifステートメントに "NOT"論理演算子(!)がありません。あなたは、「コメント投稿者IS空ではない "と言いたいのです。今のところ、この関数は作者が空ではないことを読んでいて、あなたのelse文にデフォルト設定されています。 2番目のコードブロックを使用しますが、次のように変更します。

以下を変更してください。

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;

}

姓と名があるかどうかを確認して出力します。普通の作者がいない場合は返却します。

1
GDY

うーん、このトピックを何分かデバッグして読んだ後、私はもっと読みやすい get_user_by() functionという結論に至りました。

だから私は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;
}
0
Eduard