WordPress 用于显示作者或者评论者个性化头像(Avatar)的方法非常棒。但是只有那些注册了 Gravatar 服务的用户能有自己的特色头像,其余的用户则是使用 WordPress 默认的头像。如果想自定义登入用户的头像,或者修改 WordPress 默认的头像可以用内置函数 get_avatar() 及其钩子(Hook)来实现。
get_avatar() 就是用于获取登录用户的个性化头像相关信息的函数。目前,WordPress 文档并没有详细介绍 get_avatar() 的滤器钩子的使用说明。介绍 get_avatar() 并不是本文的目的,因为 WordPress 编程文档中已有 get_avatar 的详细介绍。下面先简单介绍 get_avatar 函数,然后重点说明一下,在保持 WordPress 默认个性化头像设置的情况下,如何使用 get_avatar 的 filter 来对其进行进一步处理。
默认的 WordPress 头像¶
如果不想使用 WordPress 默认的头像设置,可以使用带参数的 get_avatar() 函数来自定义,很容易就可以覆盖 WordPress 默认的头像设置。例如,通过下面的用法就可以轻易将评论作者的头像替换为自己设定的 face.jpg:
<?php get_avatar( $comment->comment_author_email, 68, get_template_directory_uri()."/images/face.jpg" ); ?>
其输出结果类似于:
<img alt='' src="https://cnzhx.net/wp-content/cnzhx2011/images/face.jpg" class='avatar avatar-68 photo' height='68' width='68' />
get_avatar() 是 WordPress 推荐的获取个性化头像的方法。上例中通过提供一个自定义的图片路径来覆盖 WordPress 默认设置,该图片在主题文件目录下的 /images 文件夹下。甚至可以稍作改变来设置一个随机的图片做为头像,比如使用 php 程序的 random(随机)方法来随机选择一张图片。
get_avatar() 函数多用于评论列表中,但是其它地方也有用,比如 WordPress 管理后台用于显示评论作者头像以及任何地方显示作者/评论者头像的地方。总之,它是 WordPress 中默认的用于显示个性化头像的函数。
使用 Filter Hook 自定义 WordPress 个性化头像¶
另一个自定义 WordPress 个性化头像的方法就是使用其提供的 filter hook。在 get_avatar() 函数中也有一个 filter hook,可以使用 add_filter 方法来处理 get_avatar 的内容,但是官方并没有详细说明。其用法为,
add_filter( 'get_avatar', array( $this, 'my_get_avatar' ), 10, 5 );
可以看到,其用法与我们经常用于处理文章/静态页面内容的 filter 差不多(在 Lazy Load 图片的插件中,就用类似的方法来批量替换内容中的图片代码段;当然我们也可以将类似的方法用于 get_avatar 来实现头像的 Lazy Load 加载)。其中 my_get_avatar 是我们自己定义的一个用于处理 get_avatar 的函数。例如,
function my_get_avatar($avatar, $id_or_email, $size, $default, $alt){ //$avatar format includes the tag <img> $imgpath = "http://mysite.com/image/myimage.jpg"; $my_avatar = "<img src='".$path."' alt='".$alt."' height='".$size."' width='".$size."' />"; return $my_avatar; }
上面的方法包含了 5 个参数:
- $avatar:由 WordPress 给出的默认 avatar,包含
<img>
标签;注意不是默认的头像图片(见前面的输出结果举例)。 - $id_or_email:用户的 ID 或者 email 地址(如果是注册用户,用其 id 就可以得到其个性化头像;如果是评论者,则需要用到其 email 来从 Gravatar 获取其个性化头像)。
- $size:图片的尺寸。
- $default:这是当我们使用 get_avatar 函数来获取个性化头像时 WordPress 提供的默认头像图片地址。
- $alt:在
<img>
标签中的附加信息(前面 get_avatar 举例中的第四个参数)。
通过这样的方式,我们就可以使用 my_get_avatar() 函数来改变默认的 get_avatar() 的输出结果,也就是对它进行一些操作,然后再把处理后的结果返回给它。
如果只是要改变默认的自定义头像,直接在 get_avatar 中指定参数就可以了。但是如果要搞一些复杂的小动作,使用 Filter Hook 就很方便了。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/wordpress-avatar-hook/>。转载请保留此信息及相应链接。
引用通告: 对 WordPress Lazy Load 图片延迟加载插件稍作改进 | 水景一页
博主,你写的这篇文章太好了,比百度上那些千篇一律的抄袭好多了…
但是我有一个问题,假如我上传了多张图片到images下,想随机的使用某一张图片,这个应该怎么改啊,我看你提了一句用php的random函数??
我设想可以这样:
1.假设你在 images 文件夹下有 10 个头像命令为 1.jpg、2.jpg …… 10.jpg
2.将
comment_author_email, 68, get_template_directory_uri()."/images/face.jpg" ); ?>
改为
comment_author_email, 68, get_template_directory_uri()."/images/".rand(1,10).".jpg" ); ?>
就可以随机取其中一个做为头像了吧。
不过我没有试过。你试过之后回复个结果吧。
我如果是想改变头像的路径应该怎么写呢?比如图片路径后面添加个-40 这样的东西。。求解
试试正则表达式,可以参考这篇修改 URI 的文章。
引用通告: 替换 WordPress Gravatar 头像链接为指定地址 - Tony's blog
表示很有帮助 我就可以自定义输出alt
欢迎常来逛逛 :)