get_avatar

The timeline below displays how wordpress function get_avatar has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.4

/**
 * Retrieves the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Added the optional `$args` parameter.
 * @since 5.5.0 Added the `loading` argument.
 * @since 6.1.0 Added the `decoding` argument.
 * @since 6.3.0 Added the `fetchpriority` argument.
 *
 * @param mixed  $id_or_email   The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
 *                              user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size          Optional. Height and width of the avatar in pixels. Default 96.
 * @param string $default_value 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)
 *                              - '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'.
 * @param string $alt           Optional. Alternative text to use in the avatar image tag.
 *                              Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar.
 *                                       Default false.
 *     @type string       $rating        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.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $fetchpriority Value for the `fetchpriority` attribute.
 *                                       Default null.
 *     @type string       $decoding      Value for the `decoding` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized.
 *                                       Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default_value = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'fetchpriority' => null,
        'decoding' => null,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default_value;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    // Update args with loading optimized attributes.
    $loading_optimization_attr = wp_get_loading_optimization_attributes('img', $args, 'get_avatar');
    $args = array_merge($args, $loading_optimization_attr);
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Returning a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading`, `fetchpriority`, and `decoding` attributes.
    $extra_attr = $args['extra_attr'];
    if (in_array($args['loading'], array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$args['loading']}'";
    }
    if (in_array($args['fetchpriority'], array('high', 'low', 'auto'), true) && !preg_match('/\bfetchpriority\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "fetchpriority='{$args['fetchpriority']}'";
    }
    if (in_array($args['decoding'], array('async', 'sync', 'auto'), true) && !preg_match('/\bdecoding\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "decoding='{$args['decoding']}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 Added the `$args` parameter.
     *
     * @param string $avatar        HTML for the user's avatar.
     * @param mixed  $id_or_email   The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
     *                              user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size          Height and width of the avatar in pixels.
     * @param string $default_value 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)
     *                              - 'mystery', 'mm', or 'mysteryman' (The Oyster Man)
     *                              - 'blank' (transparent GIF)
     *                              - 'gravatar_default' (the Gravatar logo)
     * @param string $alt           Alternative text to use in the avatar image tag.
     * @param array  $args          Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 6.3

/**
 * Retrieves the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email   The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                              user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size          Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default_value URL for the default image or a default type. Accepts '404' (return
 *                              a 404 instead of a default image), 'retro' (8bit), 'RoboHash' (robohash),
 *                              'monsterid' (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                              'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                              or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                              'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt           Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default_value = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'fetchpriority' => null,
        'extra_attr' => '',
        'decoding' => 'async',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default_value;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    // Update args with loading optimized attributes.
    $loading_optimization_attr = wp_get_loading_optimization_attributes('img', $args, 'get_avatar');
    $args = array_merge($args, $loading_optimization_attr);
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Returning a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading`, `fetchpriority` and `decoding` attributes.
    $extra_attr = $args['extra_attr'];
    if (in_array($args['loading'], array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$args['loading']}'";
    }
    if (in_array($args['decoding'], array('async', 'sync', 'auto'), true) && !preg_match('/\bdecoding\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "decoding='{$args['decoding']}'";
    }
    // Add support for `fetchpriority`.
    if (in_array($args['fetchpriority'], array('high', 'low', 'auto'), true) && !preg_match('/\bfetchpriority\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "fetchpriority='{$args['fetchpriority']}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar        HTML for the user's avatar.
     * @param mixed  $id_or_email   The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                              user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size          Square avatar width and height in pixels to retrieve.
     * @param string $default_value URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                              'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     * @param string $alt           Alternative text to use in the avatar image tag.
     * @param array  $args          Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 6.2

/**
 * Retrieves the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email   The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                              user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size          Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default_value URL for the default image or a default type. Accepts '404' (return
 *                              a 404 instead of a default image), 'retro' (8bit), 'RoboHash' (robohash),
 *                              'monsterid' (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                              'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                              or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                              'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt           Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default_value = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'extra_attr' => '',
        'decoding' => 'async',
    );
    if (wp_lazy_loading_enabled('img', 'get_avatar')) {
        $defaults['loading'] = wp_get_loading_attr_default('get_avatar');
    }
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default_value;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Returning a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading` and `decoding` attributes.
    $extra_attr = $args['extra_attr'];
    if (in_array($args['loading'], array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$args['loading']}'";
    }
    if (in_array($args['decoding'], array('async', 'sync', 'auto'), true) && !preg_match('/\bdecoding\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "decoding='{$args['decoding']}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar        HTML for the user's avatar.
     * @param mixed  $id_or_email   The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                              user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size          Square avatar width and height in pixels to retrieve.
     * @param string $default_value URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                              'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     * @param string $alt           Alternative text to use in the avatar image tag.
     * @param array  $args          Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 6.1

/**
 * Retrieves the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size        Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default     Optional. URL for the default image or a default type. Accepts '404'
 *                            (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                            (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                            'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                            or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                            'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt         Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'extra_attr' => '',
        'decoding' => 'async',
    );
    if (wp_lazy_loading_enabled('img', 'get_avatar')) {
        $defaults['loading'] = wp_get_loading_attr_default('get_avatar');
    }
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Returning a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading` attribute.
    $extra_attr = $args['extra_attr'];
    $loading = $args['loading'];
    if (in_array($loading, array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$loading}'";
    }
    if (in_array($args['decoding'], array('async', 'sync', 'auto')) && !preg_match('/\bdecoding\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "decoding='{$args['decoding']}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      HTML for the user's avatar.
     * @param mixed  $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     * @param string $alt         Alternative text to use in the avatar image tag.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 5.9

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size        Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default     Optional. URL for the default image or a default type. Accepts '404'
 *                            (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                            (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                            'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                            or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                            'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt         Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'extra_attr' => '',
    );
    if (wp_lazy_loading_enabled('img', 'get_avatar')) {
        $defaults['loading'] = wp_get_loading_attr_default('get_avatar');
    }
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Returning a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading` attribute.
    $extra_attr = $args['extra_attr'];
    $loading = $args['loading'];
    if (in_array($loading, array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$loading}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      HTML for the user's avatar.
     * @param mixed  $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     * @param string $alt         Alternative text to use in the avatar image tag.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 5.6

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size        Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default     Optional. URL for the default image or a default type. Accepts '404'
 *                            (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                            (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                            'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                            or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                            'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt         Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'extra_attr' => '',
    );
    if (wp_lazy_loading_enabled('img', 'get_avatar')) {
        $defaults['loading'] = 'lazy';
    }
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading` attribute.
    $extra_attr = $args['extra_attr'];
    $loading = $args['loading'];
    if (in_array($loading, array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$loading}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(implode(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      HTML for the user's avatar.
     * @param mixed  $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 5.5

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                            user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size        Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default     Optional. URL for the default image or a default type. Accepts '404'
 *                            (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                            (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                            'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                            or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                            'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt         Optional. Alternative text to use in img tag. Default empty.
 * @param array  $args {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the img element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $loading       Value for the `loading` attribute.
 *                                       Default null.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'loading' => null,
        'extra_attr' => '',
    );
    if (wp_lazy_loading_enabled('img', 'get_avatar')) {
        $defaults['loading'] = 'lazy';
    }
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Allows the HTML for a user's avatar to be returned early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    // Add `loading` attribute.
    $extra_attr = $args['extra_attr'];
    $loading = $args['loading'];
    if (in_array($loading, array('lazy', 'eager'), true) && !preg_match('/\bloading\s*=/', $extra_attr)) {
        if (!empty($extra_attr)) {
            $extra_attr .= ' ';
        }
        $extra_attr .= "loading='{$loading}'";
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $extra_attr);
    /**
     * Filters the HTML for a user's avatar.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      HTML for the user's avatar.
     * @param mixed  $id_or_email The avatar to retrieve. Accepts a user_id, Gravatar MD5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon', 'mystery', 'mm', 'mysteryman', 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 5.4

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return string|false `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filters whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filters the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 5.3

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filters whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string|null $avatar      HTML for the user's avatar. Default null.
     * @param mixed       $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                                 user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array       $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filters the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.9

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filters whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string $avatar      HTML for the user's avatar. Default null.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array  $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_url($url2x) . ' 2x', esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filters the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.8

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filters whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string $avatar      HTML for the user's avatar. Default null.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array  $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_attr("{$url2x} 2x"), esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filters the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $default     URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
     *                            'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
     *                            Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
     * @param string $alt         Alternative text to use in the avatar image tag. Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.6

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filters whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string $avatar      HTML for the user's avatar. Default null.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array  $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_attr("{$url2x} 2x"), esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filters the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.5

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filter whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string $avatar      HTML for the user's avatar. Default null.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array  $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_attr("{$url2x} 2x"), esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.4

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysteryman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    if (is_object($id_or_email) && isset($id_or_email->comment_ID)) {
        $id_or_email = get_comment($id_or_email);
    }
    /**
     * Filter whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'pre_get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string $avatar      HTML for the user's avatar. Default null.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param array  $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_attr("{$url2x} 2x"), esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string $avatar      &lt;img&gt; tag for the user's avatar.
     * @param mixed  $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
     *                            user email, WP_User object, WP_Post object, or WP_Comment object.
     * @param int    $size        Square avatar width and height in pixels to retrieve.
     * @param string $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     * @param array  $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.2

/**
 * Retrieve the avatar `<img>` tag for a user, email address, MD5 hash, comment, or post.
 *
 * @since 2.5.0
 * @since 4.2.0 Optional `$args` parameter added.
 *
 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                           user email, WP_User object, WP_Post object, or comment object.
 * @param int    $size       Optional. Height and width of the avatar image file in pixels. Default 96.
 * @param string $default    Optional. URL for the default image or a default type. Accepts '404'
 *                           (return a 404 instead of a default image), 'retro' (8bit), 'monsterid'
 *                           (monster), 'wavatar' (cartoon face), 'indenticon' (the "quilt"),
 *                           'mystery', 'mm', or 'mysterman' (The Oyster Man), 'blank' (transparent GIF),
 *                           or 'gravatar_default' (the Gravatar logo). Default is the value of the
 *                           'avatar_default' option, with a fallback of 'mystery'.
 * @param string $alt        Optional. Alternative text to use in &lt;img&gt; tag. Default empty.
 * @param array  $args       {
 *     Optional. Extra arguments to retrieve the avatar.
 *
 *     @type int          $height        Display height of the avatar in pixels. Defaults to $size.
 *     @type int          $width         Display width of the avatar in pixels. Defaults to $size.
 *     @type bool         $force_default Whether to always show the default image, never the Gravatar. Default false.
 *     @type string       $rating        What rating to display avatars up to. Accepts 'G', 'PG', 'R', 'X', and are
 *                                       judged in that order. Default is the value of the 'avatar_rating' option.
 *     @type string       $scheme        URL scheme to use. See set_url_scheme() for accepted values.
 *                                       Default null.
 *     @type array|string $class         Array or string of additional classes to add to the &lt;img&gt; element.
 *                                       Default null.
 *     @type bool         $force_display Whether to always show the avatar - ignores the show_avatars option.
 *                                       Default false.
 *     @type string       $extra_attr    HTML attributes to insert in the IMG element. Is not sanitized. Default empty.
 * }
 * @return false|string `<img>` tag for the user's avatar. False on failure.
 */
function get_avatar($id_or_email, $size = 96, $default = '', $alt = '', $args = null)
{
    $defaults = array(
        // get_avatar_data() args.
        'size' => 96,
        'height' => null,
        'width' => null,
        'default' => get_option('avatar_default', 'mystery'),
        'force_default' => false,
        'rating' => get_option('avatar_rating'),
        'scheme' => null,
        'alt' => '',
        'class' => null,
        'force_display' => false,
        'extra_attr' => '',
    );
    if (empty($args)) {
        $args = array();
    }
    $args['size'] = (int) $size;
    $args['default'] = $default;
    $args['alt'] = $alt;
    $args = wp_parse_args($args, $defaults);
    if (empty($args['height'])) {
        $args['height'] = $args['size'];
    }
    if (empty($args['width'])) {
        $args['width'] = $args['size'];
    }
    /**
     * Filter whether to retrieve the avatar URL early.
     *
     * Passing a non-null value will effectively short-circuit get_avatar(), passing
     * the value through the {@see 'pre_get_avatar'} filter and returning early.
     *
     * @since 4.2.0
     *
     * @param string            $avatar      HTML for the user's avatar. Default null.
     * @param int|object|string $id_or_email A user ID, email address, or comment object.
     * @param array             $args        Arguments passed to get_avatar_url(), after processing.
     */
    $avatar = apply_filters('pre_get_avatar', null, $id_or_email, $args);
    if (!is_null($avatar)) {
        /** This filter is documented in wp-includes/pluggable.php */
        return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
    }
    if (!$args['force_display'] && !get_option('show_avatars')) {
        return false;
    }
    $url2x = get_avatar_url($id_or_email, array_merge($args, array('size' => $args['size'] * 2)));
    $args = get_avatar_data($id_or_email, $args);
    $url = $args['url'];
    if (!$url || is_wp_error($url)) {
        return false;
    }
    $class = array('avatar', 'avatar-' . (int) $args['size'], 'photo');
    if (!$args['found_avatar'] || $args['force_default']) {
        $class[] = 'avatar-default';
    }
    if ($args['class']) {
        if (is_array($args['class'])) {
            $class = array_merge($class, $args['class']);
        } else {
            $class[] = $args['class'];
        }
    }
    $avatar = sprintf("<img alt='%s' src='%s' srcset='%s' class='%s' height='%d' width='%d' %s/>", esc_attr($args['alt']), esc_url($url), esc_attr("{$url2x} 2x"), esc_attr(join(' ', $class)), (int) $args['height'], (int) $args['width'], $args['extra_attr']);
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     * @since 4.2.0 The `$args` parameter was added.
     *
     * @param string            $avatar      &lt;img&gt; tag for the user's avatar.
     * @param int|object|string $id_or_email A user ID, email address, or comment object.
     * @param int               $size        Square avatar width and height in pixels to retrieve.
     * @param string            $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     * @param array             $args        Arguments passed to get_avatar_data(), after processing.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $args['size'], $args['default'], $args['alt'], $args);
}

WordPress Version: 4.1

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5.0
 *
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return false|string `<img>` tag for the user's avatar.
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        /**
         * Filter the list of allowed comment types for retrieving avatars.
         *
         * @since 3.0.0
         *
         * @param array $types An array of content types. Default only contains 'comment'.
         */
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     *
     * @param string            $avatar      Image tag for the user's avatar.
     * @param int|object|string $id_or_email A user ID, email address, or comment object.
     * @param int               $size        Square avatar width and height in pixels to retrieve.
     * @param string            $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .10

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5.0
 *
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        /**
         * Filter the list of allowed comment types for retrieving avatars.
         *
         * @since 3.0.0
         *
         * @param array $types An array of content types. Default only contains 'comment'.
         */
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     *
     * @param string            $avatar      Image tag for the user's avatar.
     * @param int|object|string $id_or_email A user ID, email address, or comment object.
     * @param int               $size        Square avatar width and height in pixels to retrieve.
     * @param string            $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 3.9

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5.0
 *
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        /**
         * Filter the list of allowed comment types for retrieving avatars.
         *
         * @since 3.0.0
         *
         * @param array $types An array of content types. Default only contains 'comment'.
         */
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    /**
     * Filter the avatar to retrieve.
     *
     * @since 2.5.0
     *
     * @param string            $avatar      Image tag for the user's avatar.
     * @param int|object|string $id_or_email A user ID, email address, or comment object.
     * @param int               $size        Square avatar width and height in pixels to retrieve.
     * @param string            $alt         Alternative text to use in the avatar image tag.
     *                                       Default empty.
     */
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .30

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 8.3

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .20

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 8.2

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .10

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 3.8

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        }
        if (!$email && !empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .30

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 7.3

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .20

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 7.2

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: .10

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $out = esc_url($default);
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}

WordPress Version: 3.7

/**
 * Retrieve the avatar for a user who provided a user ID or email address.
 *
 * @since 2.5
 * @param int|string|object $id_or_email A user ID,  email address, or comment object
 * @param int $size Size of the avatar image
 * @param string $default URL to a default image to use if no avatar is available
 * @param string $alt Alternative text to use in image tag. Defaults to blank
 * @return string <img> tag for the user's avatar
*/
function get_avatar($id_or_email, $size = '96', $default = '', $alt = false)
{
    if (!get_option('show_avatars')) {
        return false;
    }
    if (false === $alt) {
        $safe_alt = '';
    } else {
        $safe_alt = esc_attr($alt);
    }
    if (!is_numeric($size)) {
        $size = '96';
    }
    $email = '';
    if (is_numeric($id_or_email)) {
        $id = (int) $id_or_email;
        $user = get_userdata($id);
        if ($user) {
            $email = $user->user_email;
        }
    } elseif (is_object($id_or_email)) {
        // No avatar for pingbacks or trackbacks
        $allowed_comment_types = apply_filters('get_avatar_comment_types', array('comment'));
        if (!empty($id_or_email->comment_type) && !in_array($id_or_email->comment_type, (array) $allowed_comment_types)) {
            return false;
        }
        if (!empty($id_or_email->user_id)) {
            $id = (int) $id_or_email->user_id;
            $user = get_userdata($id);
            if ($user) {
                $email = $user->user_email;
            }
        } elseif (!empty($id_or_email->comment_author_email)) {
            $email = $id_or_email->comment_author_email;
        }
    } else {
        $email = $id_or_email;
    }
    if (empty($default)) {
        $avatar_default = get_option('avatar_default');
        if (empty($avatar_default)) {
            $default = 'mystery';
        } else {
            $default = $avatar_default;
        }
    }
    if (!empty($email)) {
        $email_hash = md5(strtolower(trim($email)));
    }
    if (is_ssl()) {
        $host = 'https://secure.gravatar.com';
    } else if (!empty($email)) {
        $host = sprintf("http://%d.gravatar.com", hexdec($email_hash[0]) % 2);
    } else {
        $host = 'http://0.gravatar.com';
    }
    if ('mystery' == $default) {
        $default = "{$host}/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}";
    } elseif ('blank' == $default) {
        $default = $email ? 'blank' : includes_url('images/blank.gif');
    } elseif (!empty($email) && 'gravatar_default' == $default) {
        $default = '';
    } elseif ('gravatar_default' == $default) {
        $default = "{$host}/avatar/?s={$size}";
    } elseif (empty($email)) {
        $default = "{$host}/avatar/?d={$default}&amp;s={$size}";
    } elseif (strpos($default, 'http://') === 0) {
        $default = add_query_arg('s', $size, $default);
    }
    if (!empty($email)) {
        $out = "{$host}/avatar/";
        $out .= $email_hash;
        $out .= '?s=' . $size;
        $out .= '&amp;d=' . urlencode($default);
        $rating = get_option('avatar_rating');
        if (!empty($rating)) {
            $out .= "&amp;r={$rating}";
        }
        $out = str_replace('&#038;', '&amp;', esc_url($out));
        $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    } else {
        $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
    }
    return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);
}