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

如何仅在WooCommerce商品页评论区应用get_avatar过滤器?

问题

现有代码可实现用评论者姓名首字母替换WooCommerce商品页评论区的Gravatar头像,但会同时修改管理员菜单栏的头像,需要将过滤器仅应用于商品页评论区域。

解决方案

要限制过滤器的作用范围,需在原有判断基础上补充关键条件:

  • 排除后台管理页面:用is_admin()判断当前是否处于后台环境,若是直接返回原头像
  • 优化姓名首字母获取逻辑:处理用户只有单名的情况,避免出现PHP报错
修改后的代码
// Apply filter
add_filter( 'get_avatar' , 'my_custom_avatar' , 1 , 5 );

function my_custom_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
    $user = false;
    
    // 仅在前台商品页生效,排除后台环境
    if ( !is_product() || is_admin() ) return $avatar;

    if ( is_numeric( $id_or_email ) ) {
        $id = (int) $id_or_email;
        $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 ) ) {
        $user_name = explode(" ", $user->display_name);
        $first_initial = substr($user_name[0], 0, 1);
        // 处理单名用户,避免Undefined offset错误
        $last_initial = isset($user_name[1]) ? substr($user_name[1], 0, 1) : '';
        
        $avatar = '<div class="cnc_customer-review-profile">
                <span>' . $first_initial . $last_initial . '</span>
            </div>';
    }

    return $avatar;
}
补充说明
  • is_admin()会识别后台环境,确保后台菜单栏、评论管理页的头像不受影响
  • 单名用户的处理逻辑避免了因数组索引不存在导致的报错
  • 若需更精准限制仅在评论区生效,可额外判断$alt属性(评论区头像的alt通常包含“avatar”或评论者相关描述),但结合is_product()和!is_admin()已能覆盖常规需求

内容的提问来源于stack exchange,提问作者Jose Chavez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:11