会员计划生效期间显示自定义头像图片
解决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
相关产品推荐
相关产品推荐

