Linking comments from registered users to their profile pages

I am trying to find a way to link the ‘username’ in comments from registered and logged in users to their profile pages instead of their website URL. And comments from unregistered users to their website URL as usual.

Is this possible? My wordpress version is 3.5.1 and I am using the default theme Twenty Twelve.

Here’s the code to the function ‘twentytwelve_comment’:

<li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
    <article id="comment-<?php comment_ID(); ?>" class="comment">
        <header class="comment-meta comment-author vcard">
            <?php
                echo get_avatar( $comment, 44 );
                printf( '<cite class="fn">%1$s %2$s</cite>',
                    get_comment_author_link(),
                    // If current post author is also comment author, make it known visually.
                    ( $comment->user_id === $post->post_author ) ? '<span> ' . __( 'Post author', 'twentytwelve' ) . '</span>' : ''
                );
                printf( '<a href="https://wordpress.stackexchange.com/questions/94565/%1$s"><time datetime="%2$s">%3$s</time></a>',
                    esc_url( get_comment_link( $comment->comment_ID ) ),
                    get_comment_time( 'c' ),
                    /* translators: 1: date, 2: time */
                    sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() )
                );
            ?>
        </header><!-- .comment-meta -->

        <?php if ( '0' == $comment->comment_approved ) : ?>
            <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'twentytwelve' ); ?></p>
        <?php endif; ?>

        <section class="comment-content comment">
            <?php comment_text(); ?>
            <?php edit_comment_link( __( 'Edit', 'twentytwelve' ), '<p class="edit-link">', '</p>' ); ?>
        </section><!-- .comment-content -->

        <div class="reply">
            <?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply', 'twentytwelve' ), 'after' => ' <span>&darr;</span>', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
        </div><!-- .reply -->
    </article><!-- #comment-## -->
<?php
    break;
endswitch; // end comment_type check
}
endif;

3 Answers
3

I have written a solution for that some time ago:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Comment author URI to blog author page
 * Description: Changes the comment author URI to the blog’s author archive
 * Version:     2012.07.18
 * Author:      Fuxia Scholz
 * Author URI:  https://fuxia.me
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 */

if ( ! function_exists( 't5_comment_uri_to_author_archive' ) )
{
    add_filter( 'get_comment_author_url', 't5_comment_uri_to_author_archive' );

    function t5_comment_uri_to_author_archive( $uri )
    {
        global $comment;

        // We do not get the real comment with this filter.
        if ( empty ( $comment )
            or ! is_object( $comment )
            or empty ( $comment->comment_author_email )
            or ! $user = get_user_by( 'email', $comment->comment_author_email )
        )
        {
            return $uri;
        }

        return get_author_posts_url( $user->ID );
    }
}

Leave a Comment