Gallery

ACF Pro

gallery

The Gallery field is native to ACF PRO and provides an interactive interface for managing a collection of attachments.

Resolve Type

The “gallery” field type resolves as a “AcfMediaItemConnection” Type in the GraphQL Schema.

This allows for images to be queried as a nodes of the MediaItem Type, where the client can ask for any property of each Image.

Field Settings

SettingDescriptionImpact on WPGraphQL
Return Format
acfe_field_group_conditionEnable Global Conditional Logic for a specific field, which can then be used in an another Field Group as condition, both as Field Group Condition and Field Condition.This is a presentational field in the WordPress admin and has no impact on the GraphQL Schema or GraphQL resolvers.
widthHTML elements applied to the wrapper of the field in the WordPress admin.This is a presentational field in the WordPress admin and has no impact on the GraphQL Schema or GraphQL resolvers.
show_in_graphqlWhether the field should be queryable via GraphQL. NOTE: Changing this to false for existing field can cause a breaking change to the GraphQL Schema. Proceed with caution.Checking this will expose the field to the GraphQL Schema. NOTE: If a field is added to the GraphQL Schema, then later removed from the Schema, this is considered a breaking change as client applications that were querying for the field would be breaking once it’s been removed from the Schema.
graphql_descriptionThe description of the field, shown in the GraphQL Schema. Should not include any special characters.The description of the field that is returned when using Schema Introspection queries, used by tools such as the GraphiQL IDE.
graphql_field_nameThe name of the field in the GraphQL Schema. Should only contain numbers and letters. Must start with a letter. Recommended format is “snakeCase”.The name of the field in the GraphQL Schema. The name must be unique to the Field Group (i.e. there cannot be 2 fields in one ACF Field Group with the same “GraphQL Field Name”, including when using Clone Fields).
nameSingle word, no spaces. Underscores and dashes allowedThis is the name that is used to store field data in meta tables. The name will not affect the GraphQL Schema, but if the name is changed after data is already saved, it might impact resolution of the previously stored data. Changing the field name could negatively impact the GraphQL experience.
labelThis is the name which will appear on the EDIT page.This field is presentational for the WordPress admin and will not impact the GraphQL Schema.
requiredWhether the field should be required when inputting new dataThe “required” setting on an ACF Field does not directly impact the WPGraphQL Schema. While it might seem like setting an ACF Field to “required” should enforce the field to be a “Non Null” field in the GraphQL Schema, we believe this would be a mistake. Setting a field in the GraphQL Schema as “NonNull” will return errors if no data is present to be returned. Since the “required” setting can be toggled “on” on an ACF Field long after content already exists with no data for the field, this would cause errors to be returned for older content, and we believe this to be unexpected behavior. Instead of tying “GraphQL Non Null” to the ACF “Required” setting, we’ve provided a “GraphQL: NonNull” setting where you can explicitly opt-in to a field being “Non Null” in the Schema.
instructionsInstructions for authors. Shown when submitting dataThis field is used to tell people in the WordPress admin how to use the field. If a “GraphQL Description” is not provided for a field, the “instructions” will be used as a fallback in GraphQL Introspection queries, used in tools such as the GraphiQL IDE.
conditional_logicAllow the field to be displayed conditionally in the Admin based on dynamic conditions.Conditional Logic should not impact the GraphQL Schema. Fields that are conditionally available in the admin should always be available in the Schema. The data that is resolved for a field might be impacted by conditional logic.

Field Configuration

An example of registering a field group with a gallery field in PHP (the same can be configured in the ACF admin UI, or via ACF JSON):

<?php
add_action( 'acf/include_fields', function() {
	if ( ! function_exists( 'acf_add_local_field_group' ) ) {
		return;
	}
	acf_add_local_field_group( [
		'key'                              => 'my_field_group_gallery',
		'title'                            => 'My Field Group with gallery',
		'show_in_graphql'                  => 1,
		'graphql_field_name'               => 'myFieldGroupWithGallery',
		'map_graphql_types_from_location_rules' => 0,
		'graphql_types'                    => [ 'Page' ],
		'fields'                           => [
			[
				'key'                => 'my_field_gallery',
				'label'              => 'My Field',
				'name'               => 'my_field',
				'type'               => 'gallery',
				'show_in_graphql'    => 1,
				'graphql_field_name' => 'myFieldWithGallery',
			],
		],
		'location'                         => [
			[
				[
					'param'    => 'post_type',
					'operator' => '==',
					'value'    => 'page',
				],
			],
		],
	] );
} );
query GalleryField($uri: String! = "kitchen-sink") {
  nodeByUri(uri: $uri) {
    id
    uri
    ...WithAcfProKitchenSink
  }
}

fragment WithAcfProKitchenSink on WithAcfAcfProKitchenSink {
  acfProKitchenSink {
    gallery {
      nodes {
        ...MediaItem
      }
    }
  }
}

fragment MediaItem on MediaItem {
  __typename
  id
  mediaDetails {
    file
  }
}

Example response:

{
  "data": {
    "nodeByUri": {
      "id": "cG9zdDozNTI=",
      "uri": "/kitchen-sink/",
      "acfProKitchenSink": {
        "gallery": {
          "nodes": [
            {
              "__typename": "MediaItem",
              "id": "cG9zdDozODA=",
              "mediaDetails": {
                "file": "2023/05/field-user-roles.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDoyODM=",
              "mediaDetails": {
                "file": "2023/05/field-image.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDoyODA=",
              "mediaDetails": {
                "file": "2023/05/field-gallery.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDozNzk=",
              "mediaDetails": {
                "file": "2023/05/field-taxonomy-terms.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDozNzg=",
              "mediaDetails": {
                "file": "2023/05/field-taxonomies.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDozNzc=",
              "mediaDetails": {
                "file": "2023/05/field-phone-number.png"
              }
            },
            {
              "__typename": "MediaItem",
              "id": "cG9zdDozNzY=",
              "mediaDetails": {
                "file": "2023/05/field-menu-locations.png"
              }
            }
          ]
        }
      }
    }
  }
}