为WooCommerce会员与普通用户实现条件化头像设置
WooCommerce Memberships 会员与普通用户差异化头像实现
下面是整合后的代码,通过pre_get_avatar钩子实现会员与普通用户的头像差异化显示逻辑,无需额外修改默认头像选项:
// 为会员和普通用户设置差异化默认头像 add_filter( 'pre_get_avatar', 'custom_membership_avatar', 10, 3 ); function custom_membership_avatar( $avatar, $id_or_email, $args ) { // 处理用户ID或邮箱,获取用户对象 $user = false; if ( is_numeric( $id_or_email ) ) { $user = get_user_by( 'id', $id_or_email ); } elseif ( is_object( $id_or_email ) && isset( $id_or_email->user_id ) ) { $user = get_user_by( 'id', $id_or_email->user_id ); } elseif ( is_string( $id_or_email ) ) { $user = get_user_by( 'email', $id_or_email ); } // 如果用户存在,判断是否为活跃会员 if ( $user && wc_memberships_get_user_active_memberships( $user->ID ) ) { // 会员专属头像 $avatar = sprintf( '<img src="%s" alt="会员头像" %s />', esc_url( 'https://staranddaisy.in/wp-content/uploads/2022/11/Circle_Design_Membership_Level_GOLD.webp' ), isset( $args['height'] ) && isset( $args['width'] ) ? sprintf( 'height="%d" width="%d"', $args['height'], $args['width'] ) : '' ); } else { // 普通用户默认头像 $avatar = sprintf( '<img src="%s" alt="默认头像" %s />', esc_url( 'http://staranddaisy.in/wp-content/uploads/2022/11/smily_icon_avatar-1.png' ), isset( $args['height'] ) && isset( $args['width'] ) ? sprintf( 'height="%d" width="%d"', $args['height'], $args['width'] ) : '' ); } return $avatar; }
代码说明
- 统一使用
pre_get_avatar钩子,避免多钩子冲突,逻辑更集中 - 完善用户对象获取逻辑,兼容
$id_or_email参数的多种传入形式(ID、邮箱、评论对象等) - 对头像URL使用
esc_url()进行安全转义,符合WordPress安全规范 - 保留头像尺寸参数,确保页面样式一致性
- 通过
wc_memberships_get_user_active_memberships()判断用户是否为活跃会员,精准区分会员与普通用户
内容的提问来源于stack exchange,提问作者SND Dev
相关产品推荐
相关产品推荐

