4

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.

What should I do to make them different?

  • Do you want to differentiate Registered users without avatars from Anonymous visitors? – brasofilo Jul 13 '12 at 15:25
  • No, I don't have registered users :-) – mvod Jul 14 '12 at 0:31
6

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. :)

  • Thank you! Instead of placekitten.com I will try http://www.gravatar.com/avatar/{MD5}.jpg?s=32&d=identicon – mvod Jul 14 '12 at 0:35
1

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.

-2

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';
}
  • That code snippet doesn't colide with WordPress core updates; I don't get your point about using a third party plugin to include the snippet. – cybmeta Feb 1 '17 at 8:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.