web-dev-qa-db-ja.com

コメントはdisplay_nameの設定を尊重しない、これを克服するためのプラグインの作り方

私がWordpressに何かを投稿するとき、それは私の表示名で投稿されます。ただし、表示名を変更した場合、自分が投稿した投稿は新しい投稿者で更新されます。コメントは古い名前のままになります。

私のワードプレスサイトではコメントは登録されたユーザーにのみ利用可能で、表示名フィールドは隠されています - 彼らはカスタムプロファイルを持っているので、私は使用されるdisplay_nameを上書きしたいと思います。それで、私は運なしでthe_authorフックを試しました。

ソースコードを見ると、author_linkの作者の名前は次のように生成されています。

function get_comment_author( $comment_ID = 0 ) {
    $comment = get_comment( $comment_ID );
    if ( empty($comment->comment_author) ) {
        if (!empty($comment->user_id)){
            $user=get_userdata($comment->user_id);
            $author=$user->user_login;
        } else {
            $author = __('Anonymous');
        }
    } else {
        $author = $comment->comment_author;
    }
    return apply_filters('get_comment_author', $author);
}

つまり、comment_authorがデータベースに書き込まれていると、それを使用することはできません。そうでなければ - コメント投稿者の現在のuser_loginがget_comment_authorフックに渡されます。そこで、私はDBに問い合わせて行を取得し、姓と名を取得することができます。新しいクエリが必要になるのは嫌ですが、それが唯一の方法であれば、これを使用することもできます。しかし、それを機能させるために私が実行すべきステップは何ですか。今のところcomment_authorは常にデータベースに書き込まれます。

1

このコードはフィルタを使って仕事をします。コメントが著者の名前であると言っていることを気にしないでください。

特に難しいことは何もありません。一目瞭然です。

add_filter('get_comment_author', 'wpse31694_comment_author_display_name');
function wpse31694_comment_author_display_name($author) {
    global $comment;
    if (!empty($comment->user_id)){
        $user=get_userdata($comment->user_id);
        $author=$user->display_name;    
    }

    return $author;
}
2
Otto