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

遍历指定角色用户时ACF字段统计脚本失效求助

问题解决思路

核心问题:循环结构错误

你的代码里foreach ($users as $user)后面没有添加花括号{},这导致只有紧跟的$user_id= $user->ID;这一行属于循环体,后续的查询、统计、更新逻辑都在循环外部,只会执行一次,而且仅使用最后一个遍历到的用户ID来处理,自然无法为每个用户更新统计值。

修复后的完整代码

add_action( 'run_snippet_hourly', function () {
    $user_query = array(
        'role'    => 'um_pds-project-manager',
        'orderby' => 'display_name',
        'order'   => 'ASC'
    );
    $users = get_users( $user_query );
    
    if ( !empty( $users ) ) { 
        foreach ( $users as $user ) { // 添加左花括号,标记循环体开始
            $user_id = $user->ID;
            $args = array(
                'posts_per_page' => -1,
                'post_type' => 'project',
                'meta_query' => array(
                    'relation' => 'AND',
                    array(
                        'key'   => 'status',
                        'value' => '1'
                    ),
                    array(
                        'key' => 'pds_project_manager',
                        'value' => $user_id,
                        'compare' => '=' // 建议替换LIKE为=,避免误匹配相似ID
                    )
                )
            );

            $posts_pm = get_posts($args);
            $pds_project_manager_count = count($posts_pm);
            // 更新用户统计字段
            update_user_meta( $user_id, 'user_project_count', $pds_project_manager_count);
        } // 添加右花括号,闭合foreach循环
    }
} );//end Cron 

额外优化建议

  • 替换compare规则:ACF单选用户字段存储的是纯数字ID,用LIKE会出现误匹配(比如ID=3会匹配ID=13、33等),改用=能实现精准匹配。
  • 若pds_project_manager是多选用户字段,需将compare改为IN,同时value传入数组格式,但你的单ID测试正常,说明是单选字段,用=即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:34