Recipes

WPGraphQL Recipes are bite-size morsels that can help satisfy your craving for a productivity boost when working with WPGraphQL. Here you will find helpful tips and tricks for extending the WPGraphQL Schema, or otherwise modifying the WPGraphQL API.

    Page Siblings Connection

    Below is a connection that adds the ability to query page siblings (i.e. pages that share the same parent)

    Fix pagination conflict with the “Advanced Taxonomy Terms Order” plugin

    When using the Advanced Taxonomy Terms Order plugin along with WPGraphQL, you might experience some issues with paginated queries.

    Fix pagination conflict with the “Post Type Order” plugin

    When using the Post Type Order plugin along with WPGraphQL, you might experience some issues with paginated queries.

    Deprecating a field in the Schema

    Sometimes it can be helpful to deprecate a field in the Schema without removing it altogether.

    Allow login mutation to be public when the endpoint is fully restricted

    If you’ve configured your WPGraphQL settings to “Limit the execution of GraphQL operations to authenticated requests”, this will block all root operations unless the user making the request is already authenticated.

    If you’re using a GraphQL mutation to authenticate, such as the one provided by WPGraphQL JWT Authentication, you might want to allow the login mutation to still be executable by public users, even if the rest of the API is restricted.

    This snippet allows you to “allow” the login mutation when all other root operations are restricted.

    Remove Extensions from GraphQL Response

    This snippet removes the “extensions” from the GraphQL response:

    Query the Homepage

    In WordPress, the homepage can be a Page or an archive of posts of the Post post_type (which is represented by WPGraphQL as a “ContentType” node).

    This query allows you to query the homepage, and specify what data you want in response if the homepage is a page, or if the homepage is a ContentType node.

    Make all Users Public

    The following snippets allow for Users with no published content to be shown in public (non-authenticated) WPGraphQL query results.

    Register a basic Mutation

    This snippet shows how to register a basic GraphQL Mutation with a single input field, a single output field, and the input is simply returned as the value for the output.

    Showing Post Type labels in public queries

    WPGraphQL respects WordPress core access control rights. This means that data that is only available to authenticated users in the WordPress admin is only available to authenticated users making GraphQL requests.

    Making Menus and Menu Items public

    By default, Menus and Menu Items that are not assigned to a Menu Location are considered private, meaning they are not exposed in non-authenticated WPGraphQL Queries.

    If you want to expose Menus and Menu Items that are not assigned to menu locations to public GraphQL Queries, you can use the following snippet:

    Add Edit Link to All Post Types

    The following snippet shows how to add the “Edit” link as a GraphQL field to all post types:

    Changing the Server Debug Flag

    The following snippets show how to change the Debug Flag for the GraphQL Server execution.

    Add field to output URLs for Sitemap

    The following code is an example of how you can create a field called allUrls that will output site URLs that could be used to generate a sitemap.

    Register Connection to Attached Media

    This code shows how to register a connection to attached media in WPGraphQL

    Register GraphQL Field with Argument

    This is an example of registering a field with an argument showing how to use the argument in a resolver.

    Register field as a list of strings

    The below code registers a field called listOfStrings that returns a list of strings as the result:

    Register object and field for custom list of users

    The following code creates an object type called StuntPerformer and creates a field on the RootQuery called stuntPerformers that returns a custom list of users.

    Using GraphQL Fragments in PHP

    You can execute GraphQL queries in PHP. In this case, we even show using a GraphQL Fragment.

    Update WPGraphQL Endpoint URL

    You can modify the WPGraphQL endpoint in code with the following:

    Add WP Admin Color Schemes to WPGraphQL

    The following example code allows you to add WP Admin Color Schemes data to WPGraphQL.

    Log WPGraphQL requests to error log

    This snippet logs all WPGraphQL requests to the error log

    Filter to add restricted field on Model

    Labels on Post Types are not publicly exposed by WordPress. They are attributes for use in the Admin, and are treated with respect to proper access to the admin.

    Tag to Content Node Connection

    The following code registers a connection from Tags to ContentNodes. A field name called contentNodes will be added to the Tag type to make it easy to view all Posts that are tagged with that specific term.

    List of Key Values

    This is an example showing how to return a list of keys and values where the keys and values are both strings.

    Add Primary Category field for The SEO Framework plugin

    The following adds a field called primaryCat field when using The SEO Framework WordPress Plugin

    Debugging JWT Authentication

    This snippet outputs the $_SERVER superglobal so we can see if the Authorization token is being passed to the server or not.

    Filter Connection Args

    This filters connection args by checking the field name the connection is coming from as well as the type the connection is coming from.

    Add field for unencoded content

    The following adds a field to the NodeWithContentEditor interface to get the unencoded content for a post:

    ACF Nav Menu Plugin Support

    This adds support (native) for the ACF Nav Menu field plugin (https://github.com/jgraup/advanced-custom-fields-nav-menu-field). This also requires WPGraphQL for Advanced Custom Fields.

    Popular Posts

    The following code allows you to query for popular posts. It’s still up to you to determine the best way to store popular posts, but this example assumes a meta_key is involved. Beware though, meta queries can be expensive!