仅获取附加到特定捆绑包的现场机器名称的最简单方法是:
$field_names = array_keys(field_info_instances('node', 'article'));
使用已经提到的功能;在某些情况下field_info_instances()的一个缺点是它不提供字段类型。Drupal 7 中最轻的权重函数是field_info_field_map()。它可以放在这样的辅助函数中:
/**
* Helper function to return all fields of one type on one bundle.
*/
function fields_by_type_by_bundle($entity_type, $bundle, $type) {
$chosen_fields = array();
$fields = field_info_field_map();
foreach ($fields as $field => $info) {
if ($info['type'] == $type &&
in_array($entity_type, array_keys($info['bundles'])) &&
in_array($bundle, $info['bundles'][$entity_type]))
{
$chosen_fields[$field] = $field;
}
}
return $chosen_fields;
}
并像这样使用它,以获取文章内容类型的所有分类字段:
$fields = fields_by_type_by_bundle('node', 'article', 'taxonomy_term_reference');
请注意, field_info_field_map() 仅提供机器名称(如原始海报所要求的那样),但您必须使用field_info_field()加载字段对象才能获取字段标签(人类可读的名称)。