我知道这是一个老问题,但我想把我的答案抛给可能会发现这个问题的其他人。您的代码有几个问题:
-
根据ACF docs for get_field_object(),他们说“在某些情况下,可能需要通过其键加载字段,例如尚未保存值时。” 我发现在尝试检索循环外的字段对象时字段名称不起作用(这是您在此处尝试显示字段中的所有选项,而不仅仅是与特定选项相关的选项)发布)。
另一个挑战是字段键可能因环境(本地、暂存、生产等)而异,除非您同步数据库。所以这里有一个函数,可以帮助你在任何时候需要在get_field_object()等函数中使用它,通过字段名找到字段键:
if (! function_exists('acf_field_from_name')) {
function acf_field_from_name($field, $group)
{
global $wpdb;
return $wpdb->get_var($wpdb->prepare("
SELECT post.post_name as field_name
FROM $wpdb->posts AS post
LEFT JOIN $wpdb->posts AS parent
ON post.post_parent = parent.id
WHERE post.post_excerpt = %s
AND post.post_type = 'acf-field'
AND parent.post_excerpt = %s
AND parent.post_type = 'acf-field-group'
", $field, $group));
}
}
将从名称和组返回字段键,如果不存在则返回 null。
用法:
acf_field_from_name('title', 'movie-fields'); // returns field_3333333333333
acf_field_from_name('title', 'book-fields'); // returns field_4444444444444
acf_field_from_name('plumbus', 'movie'); // returns null
查看@Chris 的完整回答,了解为什么How to get Advanced Custom Fields field key from WordPress database? 中的组名很重要
那么您的代码将是:
$field_name = "team_category";
$group_name = "team_fields";
$field_key = acf_field_from_name($field_name, $group_name);
$team_category_field = get_field_object($field_key);
- 第二个问题是选择、复选框和单选字段的选项作为数组存储在字段对象数组中的项内,键为
choices。因此,要获得您需要使用的那些:
$team_category_choices = $team_category_field['choices'];
- 第三个问题是你的foreach()函数不正确。您需要传递数组并定义其中的每个数组项键(选择值保存到 DB)和值(UI 中显示的选择标签)将如何在内部函数中被引用,如下所示:
foreach($team_category_choices as $choice_value => $choice_label) {
echo '<option value="' . $choice_value . '">' . $choice_label . '</option>';
}