WordPress插件开发:获取当前编辑用户ID的问题
获取WordPress用户编辑页面中被编辑用户的ID(ACF钩子场景)
我懂你碰到的问题了——在ACF的acf/load_field/name=funbotic_parents钩子里直接用$_GET['user_id']拿不到值,明明URL里清清楚楚带着这个参数。这大概率是因为WordPress在某些钩子的执行时机,已经对请求参数做了处理,或者当前上下文里直接访问$_GET的方式不够可靠。
给你几个更稳妥的解决方案,按推荐程度排序:
方案1:利用ACF钩子自带的$post_id解析用户ID
在用户编辑页面的ACF钩子中,第二个参数$post_id的格式是user_{用户ID},直接解析这个参数就能拿到目标ID,完全贴合ACF的上下文,最靠谱:
add_filter('acf/load_field/name=funbotic_parents', 'load_funbotic_parents_field', 10, 2); function load_funbotic_parents_field($field, $post_id) { // 验证是否是用户页面的ID格式 if (str_starts_with($post_id, 'user_')) { $edited_user_id = absint(str_replace('user_', '', $post_id)); if ($edited_user_id) { // 在这里编写你的业务逻辑,比如加载可选的父用户列表 // $field['choices'] = get_available_parents($edited_user_id); } } return $field; }
方案2:调用WordPress全局变量$user_id
在用户编辑页面(user-edit.php),WordPress会自动初始化全局的$user_id变量,直接调用就能拿到被编辑用户的ID:
add_filter('acf/load_field/name=funbotic_parents', 'load_funbotic_parents_field'); function load_funbotic_parents_field($field) { global $user_id; if ($user_id) { // 用$user_id做你需要的操作 } return $field; }
方案3:通过get_current_screen()安全获取请求参数
如果担心全局变量的可靠性,可以先确认当前页面是用户编辑页,再用$_REQUEST获取参数(兼容GET/POST场景):
add_filter('acf/load_field/name=funbotic_parents', 'load_funbotic_parents_field'); function load_funbotic_parents_field($field) { $screen = get_current_screen(); // 确认当前处于用户编辑页面 if ($screen->base === 'user-edit') { $edited_user_id = absint($_REQUEST['user_id']); if ($edited_user_id) { // 执行你的逻辑 } } return $field; }
至于你原来的$_GET['user_id']返回null的原因,可能是:
- 钩子执行时机早于WordPress解析
$_GET参数的节点(这种情况比较少见) - 服务器或安全插件过滤了
$_GET参数 - WordPress内部重写请求时暂时隐藏了
$_GET参数
上面的方案都能避开这些问题,优先试试方案1,完全基于ACF的钩子上下文,最稳定。
内容的提问来源于stack exchange,提问作者Alexander LaBrie
相关产品推荐
相关产品推荐

