自定义分类法ACF值获取失败:get_field无返回值排查
我来帮你排查下这个问题,你用get_field('role_order', 'roles_222')拿不到值,大概率是这几个环节出了问题:
1. 确认分类法的slug是否准确
你提到自定义分类法名为“roles”,但ACF识别的是分类法的slug而非后台显示的名称。你可以通过以下方式确认:
- 查看注册分类法的代码,确认
register_taxonomy函数里的第一个参数(slug)是否为roles; - 或者在后台进入该分类法的术语列表,点击某个术语后,URL里的
taxonomy=xxx部分的xxx就是slug。
如果slug不是roles,那参数需要改成{$slug}_222,比如slug是employee_roles,就用employee_roles_222。
2. 检查字段组的位置规则是否绑定正确
进入ACF的字段组编辑页面,查看「位置」设置:
必须选择「分类法 → 等于 → roles」(你的分类法名称),只有这样字段组才会附加到roles分类法的术语上,否则字段值不会被存储到对应术语中。
3. 确保对应术语已经保存过字段值
创建ACF字段组后,你需要进入后台编辑ID为222的roles术语,手动填写role_order字段并点击「更新」。如果只是创建了字段但从未保存过该术语,数据库里不会有这个字段的记录,自然拿不到值。
4. 用原生函数排查问题
可以先用WordPress原生函数测试,确认字段值是否存在:
echo get_term_meta(222, 'role_order', true);
如果这个能输出值,说明ACF的get_field调用可能有环境或参数问题;如果也输出空,那说明字段值确实没存储,回到前面的步骤重新排查。
5. 确认术语ID是否正确
检查后台编辑该术语时的URL,比如wp-admin/term.php?taxonomy=roles&tag_ID=222,这里的tag_ID就是术语ID,确保你用的222是目标术语的正确ID。
内容的提问来源于stack exchange,提问作者JohnG
相关产品推荐
相关产品推荐

