ACF用户资料自定义字段切换内容显示问题排查
问题分析与修复
你的代码存在几个关键问题,导致无输出且无报错:
- 变量名错误:你定义了
$user_id = get_current_user_id();,但调用get_field时用了未定义的$id,应该改为"user_{$user_id}",否则ACF无法定位到对应用户的字段数据。 - 转义引号解析问题:代码里的
"是HTML转义字符,PHP无法正确识别,直接替换成普通双引号或单引号即可。 - 缺少登录状态判断:如果用户未登录,
get_current_user_id()会返回0,此时查询用户字段没有意义,应该先判断用户是否登录,避免无效操作。 - 可选验证步骤:可以临时添加
var_dump($variable);查看字段值是否正确获取,确认ACF字段键capa_statut和后台设置的完全一致。
修正后的代码
add_shortcode('pdf-capa-button', 'capa_btn'); function capa_btn() { // 先判断用户是否登录 if (!is_user_logged_in()) { return '<p>请先登录查看内容</p>'; } $user_id = get_current_user_id(); // 修正变量名,使用正确的用户ID $variable = get_field('capa_statut', "user_{$user_id}"); $content = ''; // 直接用普通引号匹配选项值 if ($variable == "CAPA Approved") { $content .= '<p>You are approved!</p>'; } // 可扩展其他选项的判断逻辑 // elseif ($variable == "Pending") { // $content .= '<p>Your request is pending.</p>'; // } return $content; }
额外验证点:
- 确认ACF字段组已设置为关联“用户”位置;
- 确认下拉选项的值确实是
CAPA Approved(注意大小写和空格,ACF下拉的选项值与显示文本可能不同,要匹配值而非显示文本)。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

