Title: get_avatar_data
Published: April 23, 2015
Last modified: February 24, 2026

---

# get_avatar_data( mixed $id_or_email, array $args = null ): array

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#wp--skip-link--target)

Retrieves default data about the avatar.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#parameters)󠁿

 `$id_or_email`mixedrequired

The avatar to retrieve. Accepts a user ID, Gravatar SHA-256 or MD5 hash, user email,
[WP_User](https://developer.wordpress.org/reference/classes/wp_user/) object, [WP_Post](https://developer.wordpress.org/reference/classes/wp_post/)
object, or [WP_Comment](https://developer.wordpress.org/reference/classes/wp_comment/)
object.

`$args`arrayoptional

Arguments to use instead of the default arguments.

 * `size` int
 * Height and width of the avatar in pixels. Default 96.
 * `height` int
 * Display height of the avatar in pixels. Defaults to $size.
 * `width` int
 * Display width of the avatar in pixels. Defaults to $size.
 * `default` string
 * URL for the default image or a default type. Accepts:
    - `'404'` (return a 404 instead of a default image)
    - `'retro'` (a 8-bit arcade-style pixelated face)
    - `'robohash'` (a robot)
    - `'monsterid'` (a monster)
    - `'wavatar'` (a cartoon face)
    - `'identicon'` (the "quilt", a geometric pattern)
    - `'initials'` (initials based avatar with background color)
    - `'color'` (generated background color)
    - `'mystery'`, `'mm'`, or `'mysteryman'` (The Oyster Man)
    - `'blank'` (transparent GIF)
    - `'gravatar_default'` (the Gravatar logo) Default is the value of the `'avatar_default'`
      option, with a fallback of `'mystery'`.
 * `force_default` bool
 * Whether to always show the default image, never the Gravatar.
    Default false.
 * `rating` string
 * What rating to display avatars up to. Accepts:
    - `'G'` (suitable for all audiences)
    - `'PG'` (possibly offensive, usually for audiences 13 and above)
    - `'R'` (intended for adult audiences above 17)
    - `'X'` (even more mature than above) Default is the value of the `'avatar_rating'`
      option.
 * `scheme` string
 * URL scheme to use. See [set_url_scheme()](https://developer.wordpress.org/reference/functions/set_url_scheme/)
   for accepted values.
    For Gravatars this setting is ignored and HTTPS is used
   to avoid unnecessary redirects. The setting is retained for systems using the
   ['pre_get_avatar_data'](https://developer.wordpress.org/reference/hooks/pre_get_avatar_data/)
   filter to customize avatars.
 * `processed_args` array
 * When the function returns, the value will be the processed/sanitized $args plus
   a "found_avatar" guess. Pass as a reference.
 * `extra_attr` string
 * HTML attributes to insert in the IMG element. Is not sanitized.

Default:`null`

## 󠀁[Return](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#return)󠁿

 array Along with the arguments passed in `$args`, this will contain a couple of
extra arguments.

 * `found_avatar` bool
 * True if an avatar was found for this user, false or not set if none was found.
 * `url` string|false
 * The URL of the avatar that was found, or false.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#source)󠁿

    ```php
    function get_avatar_data( $id_or_email, $args = null ) {
    	$args = wp_parse_args(
    		$args,
    		array(
    			'size'           => 96,
    			'height'         => null,
    			'width'          => null,
    			'default'        => get_option( 'avatar_default', 'mystery' ),
    			'force_default'  => false,
    			'rating'         => get_option( 'avatar_rating' ),
    			'scheme'         => null,
    			'processed_args' => null, // If used, should be a reference.
    			'extra_attr'     => '',
    		)
    	);

    	if ( is_numeric( $args['size'] ) ) {
    		$args['size'] = absint( $args['size'] );
    		if ( ! $args['size'] ) {
    			$args['size'] = 96;
    		}
    	} else {
    		$args['size'] = 96;
    	}

    	if ( is_numeric( $args['height'] ) ) {
    		$args['height'] = absint( $args['height'] );
    		if ( ! $args['height'] ) {
    			$args['height'] = $args['size'];
    		}
    	} else {
    		$args['height'] = $args['size'];
    	}

    	if ( is_numeric( $args['width'] ) ) {
    		$args['width'] = absint( $args['width'] );
    		if ( ! $args['width'] ) {
    			$args['width'] = $args['size'];
    		}
    	} else {
    		$args['width'] = $args['size'];
    	}

    	if ( empty( $args['default'] ) ) {
    		$args['default'] = get_option( 'avatar_default', 'mystery' );
    	}

    	switch ( $args['default'] ) {
    		case 'mm':
    		case 'mystery':
    		case 'mysteryman':
    			$args['default'] = 'mm';
    			break;
    		case 'gravatar_default':
    			$args['default'] = false;
    			break;
    	}

    	$args['force_default'] = (bool) $args['force_default'];

    	$args['rating'] = strtolower( $args['rating'] );

    	$args['found_avatar'] = false;

    	/**
    	 * Filters whether to retrieve the avatar URL early.
    	 *
    	 * Passing a non-null value in the 'url' member of the return array will
    	 * effectively short circuit get_avatar_data(), passing the value through
    	 * the 'get_avatar_data' filter and returning early.
    	 *
    	 * @since 4.2.0
    	 *
    	 * @param array $args        Arguments passed to get_avatar_data(), after processing.
    	 * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar SHA-256 or MD5 hash,
    	 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
    	 */
    	$args = apply_filters( 'pre_get_avatar_data', $args, $id_or_email );

    	if ( isset( $args['url'] ) ) {
    		/** This filter is documented in wp-includes/link-template.php */
    		return apply_filters( 'get_avatar_data', $args, $id_or_email );
    	}

    	$email_hash = '';
    	$user       = false;
    	$email      = false;

    	if ( is_object( $id_or_email ) && isset( $id_or_email->comment_ID ) ) {
    		$id_or_email = get_comment( $id_or_email );
    	}

    	// Process the user identifier.
    	if ( is_numeric( $id_or_email ) ) {
    		$user = get_user_by( 'id', absint( $id_or_email ) );
    	} elseif ( is_string( $id_or_email ) ) {
    		if ( str_contains( $id_or_email, '@sha256.gravatar.com' ) ) {
    			// SHA-256 hash.
    			list( $email_hash ) = explode( '@', $id_or_email );
    		} elseif ( str_contains( $id_or_email, '@md5.gravatar.com' ) ) {
    			// MD5 hash.
    			list( $email_hash ) = explode( '@', $id_or_email );
    		} else {
    			// Email address.
    			$email = $id_or_email;
    		}
    	} elseif ( $id_or_email instanceof WP_User ) {
    		// User object.
    		$user = $id_or_email;
    	} elseif ( $id_or_email instanceof WP_Post ) {
    		// Post object.
    		$user = get_user_by( 'id', (int) $id_or_email->post_author );
    	} elseif ( $id_or_email instanceof WP_Comment ) {
    		if ( ! is_avatar_comment_type( get_comment_type( $id_or_email ) ) ) {
    			$args['url'] = false;
    			/** This filter is documented in wp-includes/link-template.php */
    			return apply_filters( 'get_avatar_data', $args, $id_or_email );
    		}

    		if ( ! empty( $id_or_email->user_id ) ) {
    			$user = get_user_by( 'id', (int) $id_or_email->user_id );
    		}
    		if ( ( ! $user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
    			$email = $id_or_email->comment_author_email;
    		}
    	}

    	if ( ! $email_hash ) {
    		if ( $user ) {
    			$email = $user->user_email;
    		}

    		if ( $email ) {
    			$email_hash = hash( 'sha256', strtolower( trim( $email ) ) );
    		}
    	}

    	if ( $email_hash ) {
    		$args['found_avatar'] = true;
    	}

    	$url_args = array(
    		's' => $args['size'],
    		'd' => $args['default'],
    		'f' => $args['force_default'] ? 'y' : false,
    		'r' => $args['rating'],
    	);

    	// Handle additional parameters for the 'initials' avatar type.
    	if ( 'initials' === $args['default'] ) {
    		$name = '';

    		if ( $user ) {
    			if ( '' !== $user->display_name ) {
    				$name = $user->display_name;
    			} elseif ( '' !== $user->first_name && '' !== $user->last_name ) {
    				$name = sprintf(
    					/* translators: 1: User's first name, 2: Last name. */
    					_x( '%1$s %2$s', 'Display name based on first name and last name' ),
    					$user->first_name,
    					$user->last_name
    				);
    			} else {
    				$name = $user->user_login;
    			}
    		} elseif ( $id_or_email instanceof WP_Comment ) {
    			$name = $id_or_email->comment_author;
    		} elseif ( is_string( $id_or_email ) && false !== strpos( $id_or_email, '@' ) ) {
    			$name = str_replace( array( '.', '_', '-' ), ' ', substr( $id_or_email, 0, strpos( $id_or_email, '@' ) ) );
    		}

    		if ( '' !== $name ) {
    			if ( ! str_contains( $name, ' ' ) || preg_match( '/\p{Han}|\p{Hiragana}|\p{Katakana}|\p{Hangul}/u', $name ) ) {
    				$initials = mb_substr( $name, 0, min( 2, mb_strlen( $name, 'UTF-8' ) ), 'UTF-8' );
    			} else {
    				$first    = mb_substr( $name, 0, 1, 'UTF-8' );
    				$last     = mb_substr( $name, strrpos( $name, ' ' ) + 1, 1, 'UTF-8' );
    				$initials = $first . $last;
    			}

    			$url_args['initials'] = $initials;
    		}
    	}

    	/*
    	 * Gravatars are always served over HTTPS.
    	 *
    	 * The Gravatar website redirects HTTP requests to HTTPS URLs so always
    	 * use the HTTPS scheme to avoid unnecessary redirects.
    	 */
    	$url = 'https://secure.gravatar.com/avatar/' . $email_hash;

    	$url = add_query_arg(
    		rawurlencode_deep( array_filter( $url_args ) ),
    		$url
    	);

    	/**
    	 * Filters the avatar URL.
    	 *
    	 * @since 4.2.0
    	 *
    	 * @param string $url         The URL of the avatar.
    	 * @param mixed  $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar SHA-256 or MD5 hash,
    	 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
    	 * @param array  $args        Arguments passed to get_avatar_data(), after processing.
    	 */
    	$args['url'] = apply_filters( 'get_avatar_url', $url, $id_or_email, $args );

    	/**
    	 * Filters the avatar data.
    	 *
    	 * @since 4.2.0
    	 *
    	 * @param array $args        Arguments passed to get_avatar_data(), after processing.
    	 * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar SHA-256 or MD5 hash,
    	 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
    	 */
    	return apply_filters( 'get_avatar_data', $args, $id_or_email );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/link-template.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/link-template.php#L4415)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/link-template.php#L4415-L4634)

## 󠀁[Hooks](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#hooks)󠁿

 [apply_filters( ‘get_avatar_data’, array $args, mixed $id_or_email )](https://developer.wordpress.org/reference/hooks/get_avatar_data/)

Filters the avatar data.

 [apply_filters( ‘get_avatar_url’, string $url, mixed $id_or_email, array $args )](https://developer.wordpress.org/reference/hooks/get_avatar_url/)

Filters the avatar URL.

 [apply_filters( ‘pre_get_avatar_data’, array $args, mixed $id_or_email )](https://developer.wordpress.org/reference/hooks/pre_get_avatar_data/)

Filters whether to retrieve the avatar URL early.

## 󠀁[Related](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#related)󠁿

| Uses | Description | 
| [is_avatar_comment_type()](https://developer.wordpress.org/reference/functions/is_avatar_comment_type/)`wp-includes/link-template.php` |

Check if this comment type allows avatars to be retrieved.

  | 
| [rawurlencode_deep()](https://developer.wordpress.org/reference/functions/rawurlencode_deep/)`wp-includes/formatting.php` |

Navigates through an array, object, or scalar, and raw-encodes the values to be used in a URL.

  | 
| [get_user_by()](https://developer.wordpress.org/reference/functions/get_user_by/)`wp-includes/pluggable.php` |

Retrieves user info by a given field.

  | 
| [get_comment_type()](https://developer.wordpress.org/reference/functions/get_comment_type/)`wp-includes/comment-template.php` |

Retrieves the comment type of the current comment.

  | 
| [_x()](https://developer.wordpress.org/reference/functions/_x/)`wp-includes/l10n.php` |

Retrieves translated string with gettext context.

  | 
| [wp_parse_args()](https://developer.wordpress.org/reference/functions/wp_parse_args/)`wp-includes/functions.php` |

Merges user defined arguments into defaults array.

  | 
| [absint()](https://developer.wordpress.org/reference/functions/absint/)`wp-includes/load.php` |

Converts a value to non-negative integer.

  | 
| [add_query_arg()](https://developer.wordpress.org/reference/functions/add_query_arg/)`wp-includes/functions.php` |

Retrieves a modified URL query string.

  | 
| [apply_filters()](https://developer.wordpress.org/reference/functions/apply_filters/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to a filter hook.

  | 
| [get_option()](https://developer.wordpress.org/reference/functions/get_option/)`wp-includes/option.php` |

Retrieves an option value based on an option name.

  | 
| [get_comment()](https://developer.wordpress.org/reference/functions/get_comment/)`wp-includes/comment.php` |

Retrieves comment data given a comment ID or comment object.

  | 
| [is_wp_error()](https://developer.wordpress.org/reference/functions/is_wp_error/)`wp-includes/load.php` |

Checks whether the given variable is a WordPress Error.

  |

[Show 8 more](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#)

| Used by | Description | 
| [wp_credits_section_list()](https://developer.wordpress.org/reference/functions/wp_credits_section_list/)`wp-admin/includes/credits.php` |

Displays a list of contributors for a given group.

  | 
| [get_avatar_url()](https://developer.wordpress.org/reference/functions/get_avatar_url/)`wp-includes/link-template.php` |

Retrieves the avatar URL.

  | 
| [get_avatar()](https://developer.wordpress.org/reference/functions/get_avatar/)`wp-includes/pluggable.php` |

Retrieves the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/get_avatar_data/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.8.0](https://developer.wordpress.org/reference/since/6.8.0/) | Gravatar URLs use the SHA-256 hashing algorithm. | 
| [6.7.0](https://developer.wordpress.org/reference/since/6.7.0/) | Gravatar URLs always use HTTPS. | 
| [4.2.0](https://developer.wordpress.org/reference/since/4.2.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fget_avatar_data%2F)
before being able to contribute a note or feedback.