You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

会员计划生效期间显示自定义头像图片

解决WooCommerce会员头像自动替换问题

你的原有代码存在几个关键问题,导致无法实现需求:

  • 误用钩子:应该用WordPress原生的get_avatar钩子修改头像输出,而非woocommerce-memberships
  • 语法错误:函数定义嵌套在条件判断内部,不符合PHP语法规范
  • 会员判断逻辑错误:未正确获取当前用户,也未用合规方式验证会员活跃状态

以下是可直接使用的修正代码,实现「会员活跃时替换为指定头像,过期后恢复原头像」的需求:

add_filter('get_avatar', 'replace_member_avatar', 10, 5);
function replace_member_avatar($avatar, $id_or_email, $size, $default, $alt) {
    // 获取当前用户对象
    $user = is_numeric($id_or_email) ? get_user_by('id', $id_or_email) : (is_object($id_or_email) ? $id_or_email : get_user_by('email', $id_or_email));
    
    if (!$user || !is_a($user, 'WP_User')) {
        return $avatar;
    }

    // 检查用户是否拥有活跃会员资格
    if (wc_memberships_is_user_active_member($user->ID)) {
        // 替换为你的自定义会员头像URL
        $custom_avatar_url = 'https://buysnd.com/wp-content/uploads/2022/11/Circle_Design_Membership_Level_GOLD.webp';
        // 生成符合WordPress规范的头像HTML
        $avatar = sprintf('<img alt="%s" src="%s" class="avatar avatar-%d photo" height="%d" width="%d" />',
            esc_attr($alt),
            esc_url($custom_avatar_url),
            $size,
            $size,
            $size
        );
    }

    return $avatar;
}

代码关键点说明

  • 使用get_avatar钩子:这是WordPress官方提供的修改头像输出的标准钩子,覆盖所有前端显示头像的场景
  • 会员状态判断:调用WooCommerce Memberships内置的wc_memberships_is_user_active_member函数,自动处理会员过期、暂停等状态,无需手动判断有效期
  • 兼容性保障:保留原头像的HTML结构、尺寸参数和样式类,确保和主题样式兼容
  • 异常处理:增加用户对象合法性校验,避免非用户场景(比如评论访客头像)出现错误

内容的提问来源于stack exchange,提问作者Vineet SND

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:20:27