register_graphql_fields

Add one or more fields to a Type in the GraphQL Schema

register_graphql_fields( string $type_name, array $fields );

Parameters

  • $fields (array): Associative array of key/value pairs where the key is the name of the field and the value is a config array for the field.
    • $name (string): The name of the field to add to the Type. “camelCase” recommended.
    • $config (array): The config for the field being registered
      • $type (string | array): The name of the GraphQL Type the field will return. The resolve function must return this type.
        • For non-null fields: 'type' => [ 'non_null' => 'TypeName' ]
        • For listOf fields: 'type' => [ 'list_of' => 'TypeName' ]
      • $description (string): Description of the field. This will be used to self-document the schema and should describe to clients how the field should be used.
      • $resolve (function): Function that will execute when the field is asked for in a query.

Source

File: access-functions.php

Examples

Below are some examples of using the function to extend the GraphQL Schema.

Register Root Fields

This example adds multiple fields to the root of the GraphQL Schema.

add_action( 'graphql_register_types', function() {
  register_graphql_fields( 'RootQuery', [
    'fieldOne' => [
      'type' => 'String',
      'description' => __( 'Example field added to the RootQuery Type', 'replace-with-your-textdomain' ),
      'resolve' => function( $root, $args, $context, $info ) {
        return 'Field one value...';
      }
    ],
    'fieldTwo' => [
      'type' => 'Boolean',
      'description' => __( 'Another example field added to the RootQuery Type', 'replace-with-your-textdomain' ),
      'resolve' => function( $root, $args, $context, $info ) {
        return 2;
      }
    ],
  ]);
});

Example Query:

{
  fieldOne
  fieldTwo
}
Screenshot of the example query and results for fieldOne and fieldTwo
Screenshot of the example query and results for fieldOne and fieldTwo

Register Post Fields

This example shows how to register fields to the “Post” type.

add_action( 'graphql_register_types', function() {
	register_graphql_fields( 'Post', [
		'testFieldOne' => [
			'type'        => 'String',
			'description' => __( 'Example string field added to the Post Type', 'replace-with-your-textdomain' ),
			'resolve'     => function( \WPGraphQL\Model\Post $post, $args, $context, $info ) {
				return 'Example string with the title of the post: ' . $post->titleRendered;
			}
		],
		'testFieldTwo' => [
			'type'        => 'Boolean',
			'description' => __( 'Example boolean field added to the Post Type', 'replace-with-your-textdomain' ),
			'resolve'     => function() {
				return false;
			}
		]
	] );
} );

Example Query

{
  posts(first: 1) {
    nodes {
      title
      testFieldOne
      testFieldTwo
    }
  }
}
Screenshot of example query for multiple test fields registered to the "Post" type
Screenshot of example query for multiple test fields registered to the “Post” type

Published by Jason Bahl

Jason is a Principal Software Engineer at WP Engine based in Denver, CO where he maintains WPGraphQL. When he's not writing code or evangelizing about GraphQL to the world, he enjoys escaping from escape rooms, playing soccer, board games and Fortnite.