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.将
      comment_author_email, 68, get_template_directory_uri()."/images/face.jpg" ); ?>
      改为
      comment_author_email, 68, get_template_directory_uri()."/images/".rand(1,10).".jpg" ); ?>
      就可以随机取其中一个做为头像了吧。
      不过我没有试过。你试过之后回复个结果吧。

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

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>