WordPress 个性化头像滤器挂钩

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 个参数:

  1. $avatar:由 WordPress 给出的默认 avatar,包含 <img> 标签;注意不是默认的头像图片(见前面的输出结果举例)。
  2. $id_or_email:用户的 ID 或者 email 地址(如果是注册用户,用其 id 就可以得到其个性化头像;如果是评论者,则需要用到其 email 来从 Gravatar 获取其个性化头像)。
  3. $size:图片的尺寸。
  4. $default:这是当我们使用 get_avatar 函数来获取个性化头像时 WordPress 提供的默认头像图片地址。
  5. $alt:在 <img> 标签中的附加信息(前面 get_avatar 举例中的第四个参数)。

通过这样的方式,我们就可以使用 my_get_avatar() 函数来改变默认的 get_avatar() 的输出结果,也就是对它进行一些操作,然后再把处理后的结果返回给它。

如果只是要改变默认的自定义头像,直接在 get_avatar 中指定参数就可以了。但是如果要搞一些复杂的小动作,使用 Filter Hook 就很方便了。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/wordpress-avatar-hook/>。转载请保留此信息及相应链接。

8 条关于 “WordPress 个性化头像滤器挂钩” 的评论

  1. 引用通告: 对 WordPress Lazy Load 图片延迟加载插件稍作改进 | 水景一页

  2. 博主,你写的这篇文章太好了,比百度上那些千篇一律的抄袭好多了…

    但是我有一个问题,假如我上传了多张图片到images下,想随机的使用某一张图片,这个应该怎么改啊,我看你提了一句用php的random函数??

    • 我设想可以这样:
      1.假设你在 images 文件夹下有 10 个头像命令为 1.jpg、2.jpg …… 10.jpg
      2.将
      < ?php get_avatar( $comment->comment_author_email, 68, get_template_directory_uri()."/images/face.jpg" ); ?>
      改为
      < ?php get_avatar( $comment->comment_author_email, 68, get_template_directory_uri()."/images/".rand(1,10).".jpg" ); ?>
      就可以随机取其中一个做为头像了吧。
      不过我没有试过。你试过之后回复个结果吧。

  3. 我如果是想改变头像的路径应该怎么写呢?比如图片路径后面添加个-40 这样的东西。。求解

  4. 引用通告: 替换 WordPress Gravatar 头像链接为指定地址 - Tony's blog

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)