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

基于用户邮箱域名自动更新ACF字段的技术实现求助

修正ACF用户关联字段自动赋值代码的方案

原代码存在的核心问题

  • get_field('user_company')未指定用户ID,ACF默认会读取当前文章字段,而非用户元数据
  • 变量名冲突:list($user, $domain)中的$user与上方get_user_by获取的用户对象重名
  • update_field第三个参数错误:用户字段需传入用户ID标识,而非未定义的$post_title
  • ACF关联字段存储的是文章ID而非标题,直接传入字符串无法正确关联公司文章
  • 未处理公司文章不存在的边界情况

修正后的代码

function update_user_company( $user_id, $args ) {
    // 拆分邮箱获取域名,避免变量名冲突
    list($local_part, $domain) = explode('@', $args['user_email']);
    
    // 定义域名与公司名称的映射关系,便于后续扩展
    $domain_company_map = [
        'gmail.com' => 'Google',
        'amyling.com' => 'Pearlsin Arts'
    ];
    
    // 无匹配域名则直接终止操作
    if (!isset($domain_company_map[$domain])) {
        return;
    }
    
    $company_name = $domain_company_map[$domain];
    
    // 查询对应名称的Companies自定义文章ID
    $company_query = new WP_Query([
        'post_type'      => 'Companies',
        'post_title'     => $company_name,
        'posts_per_page' => 1,
        'post_status'    => 'publish',
        'no_found_rows'  => true, // 优化查询性能,无需返回总条数
        'fields'         => 'ids' // 仅返回文章ID,减少数据加载
    ]);
    
    // 找到对应公司文章后更新ACF字段
    if ($company_query->have_posts()) {
        $company_id = $company_query->posts[0];
        // 第三个参数传入'user_' + 用户ID,明确告知ACF操作的是用户元数据
        update_field('user_company', $company_id, 'user_' . $user_id);
    }
}
add_action( 'user_register', 'update_user_company', 10, 2 );

关键改动说明

  1. 变量名优化:将拆分邮箱的局部变量改为$local_part,避免与用户对象变量冲突
  2. 映射关系结构化:用数组存储域名与公司名称的对应规则,后续新增域名只需修改数组即可
  3. 正确获取关联ID:通过WP_Query查询指定名称的Companies文章,确保获取到ACF关联字段所需的文章ID
  4. 明确ACF操作对象:update_field第三个参数使用'user_' . $user_id,明确指定操作的是用户元数据而非文章字段
  5. 边界情况处理:增加域名匹配判断和文章存在性检查,避免无效操作导致的错误

内容的提问来源于stack exchange,提问作者Amy Ling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35