WordPress获取头像筛选器以匹配登录

时间:2018-12-15 作者:Johnny Dark

有get\\u avatar filter来替换ID为1的用户的avatar。它按预期工作。

https://codex.wordpress.org/Plugin_API/Filter_Reference/get_avatar

但是,是否有可能根据每个用户的登录名在评论部分匹配每个用户的头像?我有一个特定文件夹中的头像列表,它基本上需要将昵称与图像文件匹配。

实例

评论人Helldriver

头像src:wp内容/上传/头像/Helldriver.jpg

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

这个get_avatar 过滤器挂钩不仅仅适用于ID为1的用户–我假设您有这个想法,因为页面中关于get_avatar at the codex –, 但实际上,它是根据所使用的上下文来定位用户的,所以每个可能的用户,而不仅仅是一个。挂钩是get_avatar() 函数,它是pluggable function 并且可以被推翻,只需提及另一种可能性。下面我使用的是上述示例,基本上只是删除检查ID为1的用户的条件,以概述一种示例性的未经测试的方法:

add_filter( \'get_avatar\' , \'wpse322010_get_avatar\' , 1 , 6 );
function wpse322010_get_avatar( $avatar, $id_or_email, $size, $default, $alt, $args ) {
    $user = false;

    if ( is_numeric( $id_or_email ) ) {
        $id = (int) $id_or_email;
        //see: https://developer.wordpress.org/reference/functions/get_user_by/
        $user = get_user_by( \'id\' , $id );
    } elseif ( is_object( $id_or_email ) ) {
        if ( ! empty( $id_or_email->user_id ) ) {
            $id = (int) $id_or_email->user_id;
            $user = get_user_by( \'id\' , $id );
        }
    } else {
        $user = get_user_by( \'email\', $id_or_email );   
    }

    if ( $user && is_object( $user ) ) {
        //get upload dir data
        //see: https://developer.wordpress.org/reference/functions/wp_upload_dir/
        $upload_dir = wp_upload_dir();
        //get user data
        //see: https://developer.wordpress.org/reference/classes/wp_user/
        $user_id = $user->ID;
        //see: https://developer.wordpress.org/reference/functions/get_userdata/
        $user_info = get_userdata( $user_id );
        //using the username for this example
        $username = $user_info->user_login;
        //construct src
        $src = $upload_dir[\'baseurl\'] . \'/avatars/\' . $username . \'.jpg\';
        $avatar = "<img alt=\'{$alt}\' src=\'{$src}\' class=\'avatar avatar-{$size} photo\' height=\'{$size}\' width=\'{$size}\' />";
    }

    return $avatar;
}

相关推荐

Gravatar image url is wrong?

我有一段代码可以拉用户的坟墓:if( $current_user->ID == 0 ) { // Not logged in. echo \'<p><img src=\"\'.get_stylesheet_directory_uri().\'/img/wpb-default-gravatar.png\" alt=\"תמונת פרופיל\"></p>\'; echo \'<p>רוצה למכור?&