What should I do to make generated avatars different for anonymous comments?

All the comments on my website are anonymous and without registration. To post a comment you have to fill the fields name (not obligatorily) and the text of your comment (obligatorily).

I have the problem with the avatars. All of them are generated the same.

Read More

What should I do to make them different?

Related posts

Leave a Reply

3 comments

  1. There are two ways to customize the default avatar:

    1. Add a new default avatar to Settings/Discussion.
    2. Change the output of get_avatar().

    Let’s start with the first option; this processes slightly faster.

    Add a new default avatar to Settings/Discussion

    There is a filter 'avatar_defaults'. You can add more avatars here.
    You get an array of default images where the key is an URL and the value the visible name.

    Sample Code

    add_filter( 'avatar_defaults', 'wpse_58373_kitten_avatar' );
    
    /**
     * Add a new default avatar.
     *
     * @param  array $avatar_defaults Key = URL, Value = Visible name.
     * @return array
     */
    function wpse_58373_kitten_avatar( $avatar_defaults )
    {
        $avatar_defaults['http://placekitten.com/32/32'] = 'Kitty';
    
        return $avatar_defaults;
    }
    

    Result

    enter image description here

    Change the output of get_avatar().

    get_avatar() searches in an option named 'avatar_default' first. We can hook into 'pre_option_avatar_default' and return a custom (random) URL.

    Sample code

    add_filter( 'pre_option_avatar_default', 'wpse_58373_custom_default_avatar');
    
    /**
     * Return a random image URL
     */
    function wpse_58373_custom_default_avatar()
    {
        /* We use images from WP here, you should change this and put some default
         * images into your theme or plugin directory.
         */
        $base_url = admin_url( 'images' ) . '/';
        $images   = array ( 'wp-logo-vs.png', 'wpspin_dark.gif', 'yes.png' );
        $rand     = rand( 0, ( count( $images ) - 1 ) );
    
        return $base_url . $images[ $rand ];
    }
    

    Result

    enter image description here

    As you can see – you should return an image with a size that matches your theme’s avatar size. 🙂

  2. Re: random avatar generation, this was an extremely helpful answer and worked a treat with one minor modification – the function in question required an argument to pass through. Without the argument, the code returned included a jumble of html which included both the desired url of the image, as well as url of the default icon from gravitar. I changed it from this:

    wpse_58373_custom_default_avatar()

    to this:

    wpse_58373_custom_default_avatar($value)
    

    and that seemed to generate the image url without the jumble. For ease of use, the final code, with the addition of get_template_directory_uri () to target the theme rather than the admin folder, and some tucking away of variables was:

    // Random Avatar
    
    add_filter( 'pre_option_avatar_default', 'mind_bullets_default_avatar' );
    
    function mind_bullets_default_avatar ( $value ) {
    
      $tix_array = array ( 'Amer_Cyborg.jpg', 'Die_hard_3.jpg', 'Thing.jpg' );
    
    // Include randomizer in url generator
        return get_template_directory_uri().'/images/Avatars/'.$tix_array [rand( 0, ( count( $tix_array ) - 1 ) )]; 
    
    }
    

    Hope to allow users to choose their own soon, but for those who just want to comment, it keeps the look of the site consistent.

  3. To add to what already has been said, I suggest using the plugin “code snippets”

    This way, your modifications to the internals of wordpress will not collide with updates, and you can actually manage them (activate, deactivate, export them… )

    I set up a little tutorial to create custom random avatars using info from this question and Code Snippets

    custom random avatars tutorial

    This is how it looks

    example_random_avatars

    The code I used is pretty simple

    // Random Chameleon Avatar
    
    add_filter( 'pre_option_avatar_default', 'chameleon_default_avatar' );
    
    
    function chameleon_default_avatar ( $value )
    {
      return admin_url( 'images' ) . '/cham_avatars/cham_avatar'.rand( 0 , 13 ).'.jpg';
    }