Author page: Comments and Ratings?

I have a mult-author site where the author page gets high traffic. People want to know more about them. I have modified the author page to show more info, some custom fields, etc. but what I’d really like to do is turn on Comments for the author.php page (so that OTHER logged in users can leave review-like messages for the Author), and ultimately offer a star-ratings type of effect so that Users can “rate” the author. I have searched for plugins and other functions but it seems like everything is for Posts or Products or something. Any insight is greatly appreciated!

Related posts

Leave a Reply

4 comments

  1. just to add to what Rarst answered, you can create Custom Post Type not to emulate Comments but as stub posts with no ui.

    then to every Author on your site add a custom user metadata that will hold a post id of your newly made post type (one per each author) and in your author template before you call the comment loopform set the global $post to that post id.

    something like:

    <?php
    //save the true post id
    $true_id = $post->ID;
    // populate $post with the stub post
    $author_post_id = get_user_meta($user_id, author_post_id,true);
    query_posts("p=$author_post_id");
    the_post();
    
    //fool wordpress to think we are on a single post page
    $wp_query->is_single = true;
    //get comments
    comments_template();
    //reset wordpress to ture post
    $wp_query->is_single = false;
    query_posts("p=$true_id");
    the_post();
    ?>
    

    Now going back and updating all of your existing users could be a pain, but for newly create user you can create the stub post type id for user metadata on registration.

    and you can use any rating plugin that is based on posts now that you have a post (you custom post type) associated with each author.

    Hope this makes sense.
    Ohad.

  2. Yep, mechanics of comments in WP are tightly tied to posts. Which things like archives aren’t.

    Your options are:

    1. Associate comments with fake hidden posts/pages.

    2. Use external comment system that doesn’t care about WP mechanics (not something I would recommend, but it works for some people).

    3. Create and use Custom Post Type that will emulate comments.

  3. try GD star rating and look into the options and tweak it to be displayed only on specific pages

    in the settings page of GD star rating there is the following :

    Auto insert rating code:

    For individual posts.

    For individual pages.

    For posts displayed in Archives.

    For posts displayed on Front Page.

    For posts displayed on Search results

    make sure to choose For individual pages. then it should show on pages only

    If you want to exclude some pages, you might have to look into the code and exclude some pageId – but i think , this will get you a bit closer 🙂

  4. thanks for code Bainternet

    If anyone wants to update all useres I made quick hack, so you can check multiple useres and change theirs roles , then change it back, and you get all profiles updateded

           add_action( 'set_user_role', function( $user_id, $role, $old_roles)
         {
    $user_added = get_userdata( $user_id );
    //    foreach($user_id as $user) {
    if ($role != $old_roles) {
        $args = array(
            'post_type' => 'user_profile_page',
            'author' => $user_id,
        );
        $posts = get_posts($args);
        if (!$posts) {
            $profile_page = wp_insert_post(array(
                'post_title' => $user_added->user_login.'Profile', // Text only to Map those page @ admin
                'post_type' => "user_profile_page", // Custom Post type which you have created
                'post_status' => 'publish',
                'post_author' => $user_id,
            ));
    
            /**
             * Save the Profile Page id into the user meta
             */
            if (!is_wp_error($profile_page))
                add_user_meta($user_id, 'user_profile_page', $profile_page, TRUE);
        }
     }
     //    }
    
    
       }, 10, 3 );