How to make existing fields available to be created as instances on other content types etc.? I have created a custom module that simply creates a set of standard fields via a .install file. It's very simple, basically:

foreach (my_fields_fields() as $field) {
  if (!field_info_field($field['field_name'])) {
    field_create_field($field);
  }
}

function my_fields_fields() {
  return array(
    'field_my_first_name' =&gt; array(
      'field_name' =&gt; 'field_my_first_name',
      'type' =&gt; 'text',
    ),
    ...


On enabling the module, I can see that the fields have tables in the database. However, if I navigate to admin/structure/types/manage/article/fields and drop down - Select an existing field - in the Add existing field section, the fields are not present.

I don't want to create any instances of my fields in my module (do I?) because it is for other users/systems to create field instances if they want to.

How do I get Drupal to make my fields available? Thanks.
An 'existing field' in that context is one that already has an instance, it doesn't refer to the existence of the field type. Until an instance is created, it doesn't exist as such.

Your field will be available to add as a new field as usual; if you want it to appear under 'Add existing field' section, you'll need to create an instance of it first.