get_avatar()
云策文档标注
概述
get_avatar() 函数用于获取用户、电子邮件地址、MD5 哈希、评论或文章的 Gravatar 头像 HTML 标签。它接受多种参数来定制头像的尺寸、默认图像、替代文本等,并返回一个 标签字符串或失败时返回 false。
关键要点
- 参数 $id_or_email 支持多种输入类型:用户 ID、Gravatar MD5 哈希、用户电子邮件、WP_User 对象、WP_Post 对象或 WP_Comment 对象。
- 可选参数包括 $size(尺寸,默认 96)、$default_value(默认图像类型,如 '404'、'retro' 等)、$alt(替代文本)和 $args 数组(用于高级设置如高度、宽度、强制默认、评级等)。
- 函数内部使用 get_avatar_data() 获取头像数据,并应用多个过滤器如 'pre_get_avatar' 和 'get_avatar' 以允许自定义。
- 返回值为
标签字符串,包含 src、srcset、class、height、width 等属性,支持加载优化属性如 loading、fetchpriority 和 decoding。
- 如果 'show_avatars' 选项未启用且未设置 force_display,函数可能返回 false。
代码示例
// 示例:获取文章作者的头像(在循环中)
echo get_avatar( get_the_author_meta( 'ID' ), 96 );
// 示例:获取评论的头像
echo get_avatar( $comment, 96 );
// 示例:使用自定义类
$args = array(
'class' => 'wt-author-img'
);
echo get_avatar( $id_or_email, 96, '', '', $args );注意事项
- 确保在 WordPress 后台的“设置”>“讨论”中启用“显示头像”选项,否则函数可能不返回任何内容。
- 所有参数必须按顺序提供或使用 $args 数组,否则可能导致函数不工作。
- 函数使用 esc_attr() 和 esc_url() 进行转义,确保输出安全。
原文内容
Retrieves the avatar <img> tag for a user, email address, MD5 hash, comment, or post.
Parameters
$id_or_emailmixedrequired-
The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash, user email, WP_User object, WP_Post object, or WP_Comment object.
$sizeintoptional-
Height and width of the avatar in pixels.
Default:
96 $default_valuestringoptional-
URL for the default image or a default type. Accepts:
'404'(return a 404 instead of a default image)'retro'(a 8-bit arcade-style pixelated face)'robohash'(a robot)'monsterid'(a monster)'wavatar'(a cartoon face)'identicon'(the “quilt”, a geometric pattern)'initials'(initials based avatar with background color)'color'(generated background color)'mystery','mm', or'mysteryman'(The Oyster Man)'blank'(transparent GIF)'gravatar_default'(the Gravatar logo) Default is the value of the'avatar_default'option, with a fallback of'mystery'.
$altstringoptional-
Alternative text to use in the avatar image tag.
Default empty. $argsarrayoptional-
Extra arguments to retrieve the avatar.
heightintDisplay height of the avatar in pixels. Defaults to $size.widthintDisplay width of the avatar in pixels. Defaults to $size.force_defaultboolWhether to always show the default image, never the Gravatar.
Default false.ratingstringWhat 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.
schemestringURL scheme to use. See set_url_scheme() for accepted values.classarray|stringArray or string of additional classes to add to the img element.force_displayboolWhether to always show the avatar – ignores the show_avatars option.
Default false.loadingstringValue for theloadingattribute.fetchprioritystringValue for thefetchpriorityattribute.decodingstringValue for thedecodingattribute.extra_attrstringHTML attributes to insert in the IMG element. Is not sanitized.
Default:
null
Source
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 '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( '/bloadings*=/', $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( '/bfetchprioritys*=/', $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( '/bdecodings*=/', $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 );
}
Hooks
- apply_filters( ‘get_avatar’, string $avatar, mixed $id_or_email, int $size, string $default_value, string $alt, array $args )
-
Filters the HTML for a user’s avatar.
- apply_filters( ‘pre_get_avatar’, string|null $avatar, mixed $id_or_email, array $args )
-
Allows the HTML for a user’s avatar to be returned early.
Skip to note 6 content
Codex
Example for a post’s author, in The Loop.
Skip to note 7 content
richardbuff
If this function isn’t returning anything for you, go to Settings > Discussion and make sure Show Avatars is checked.
Skip to note 8 content
Codex
Example for comments.
Skip to note 9 content
Hamid Reza Sepehr
Example for the class attribute:
'wt-author-img' ) ); ?>Note: It seems that all the parameters have to be present or it doesn’t work.
Skip to note 10 content
Codex
Example for a random email address.