Title: Gato GraphQL
Author: leoloso
Published: <strong>January 8, 2024</strong>
Last modified: March 24, 2026

---

Search plugins

![](https://ps.w.org/gatographql/assets/banner-772x250.png?rev=3167174)

![](https://ps.w.org/gatographql/assets/icon-256x256.png?rev=3018638)

# Gato GraphQL

 By [leoloso](https://profiles.wordpress.org/leoloso/)

[Download](https://downloads.wordpress.org/plugin/gatographql.17.1.1.zip)

 * [Details](https://wordpress.org/plugins/gatographql/#description)
 * [Reviews](https://wordpress.org/plugins/gatographql/#reviews)
 * [Development](https://wordpress.org/plugins/gatographql/#developers)

 [Support](https://wordpress.org/support/plugin/gatographql/)

## Description

Gato GraphQL is a powerful and flexible GraphQL server for WordPress.

Use it to expose WordPress data via GraphQL. Access any piece of data (posts, users,
comments, tags, categories, etc) from your application, and also transform and mutate
data.

The [standard use cases](https://gatographql.com) are:

**Code performant apps:** Send a GraphQL query to your API and get exactly what 
you need, nothing more and nothing less.

**Build dynamic/headless sites:** Use WordPress as the CMS to manage data, and your
framework of choice to render the site.

**Speed up creating Gutenberg blocks:** Ship Gutenberg blocks faster, by avoiding
creating REST controllers to feed them data.

With Gato GraphQL, you also have the flexibility to migrate your application from
WordPress to another PHP-based framework or CMS (if ever needed) with minimal effort:
The GraphQL server can run via its standalone PHP component (which doesn’t depend
on WordPress), and only those resolvers fetching WordPress data (posts, users, comments,
etc) used by your application would need to be ported. You can do **Headless WordPress
without WordPress**, avoiding the vendor lock-in to WordPress.

### Power Extensions

The [Power Extensions](https://gatographql.com/extensions#power-extensions) allow
you to augment the server functionality.

You can purchase a [bundle containing all the power extensions](https://gatographql.com/pricing#power-extensions).

The available power extensions are:

[Access Control](https://gatographql.com/extensions/access-control): Grant granular
access to the schema (based on the user being logged-in, having some role or capability,
or by IP), to manage who can access what data.

[Caching](https://gatographql.com/extensions/caching): Make your application faster
by providing HTTP Caching for the GraphQL response, and by caching the results of
expensive operations.

[Custom Endpoints](https://gatographql.com/extensions/custom-endpoints): Create 
and expose multiple custom GraphQL schemas under their own URL, for different users,
applications, external services, or other.

[Deprecation](https://gatographql.com/extensions/deprecation): Evolve the GraphQL
schema by deprecating fields, and explaining how to replace them, through a user
interface.

[HTTP Client](https://gatographql.com/extensions/http-client): Connect to and interact
with external services via their APIs.

[Internal GraphQL Server](https://gatographql.com/extensions/internal-graphql-server):
Execute GraphQL queries directly within your application, using PHP code.

[Multiple Query Execution](https://gatographql.com/extensions/multiple-query-execution):
Combine multiple queries into a single query, sharing state across them and executing
them in the requested order.

[Persisted Queries](https://gatographql.com/extensions/persisted-queries): Use GraphQL
queries to create pre-defined endpoints as in REST, obtaining the benefits from 
both APIs.

[Query Functions](https://gatographql.com/extensions/query-functions): Manipulate
the values of fields within the GraphQL query, via a collection of utilities and
special directives providing meta-programming capabilities.

[Schema Functions](https://gatographql.com/extensions/schema-functions): The GraphQL
schema is provided with fields and directives which expose functionalities from 
the PHP programming language.

### Premium Extensions

[Premium Extensions](https://gatographql.com/extensions#premium-extensions) allow
you to integrate popular services and WordPress plugins into the GraphQL schema,
and automate the execution of queries.

You can [purchase each premium extension separately](https://gatographql.com/pricing#premium-extensions).

The available premium extensions are:

[Automation](https://gatographql.com/extensions/automation): Use GraphQL to automate
tasks in your app: Execute queries when some event happens, chain queries, and schedule
and trigger queries via WP-Cron.

[Bricks](https://gatographql.com/extensions/bricks): Integration with the Bricks
plugin, to parse and update data in Bricks pages and templates.

[Elementor](https://gatographql.com/extensions/elementor): Integration with the 
Elementor plugin, to parse and update data in Elementor pages and templates.

[Events Manager](https://gatographql.com/extensions/events-manager): Integration
with the Events Manager plugin, to fetch event data.

[JetEngine](https://gatographql.com/extensions/jetengine): Integration with the 
JetEngine plugin, to fetch custom content types and related data.

[MultilingualPress](https://gatographql.com/extensions/multilingualpress): Integration
with the MultilingualPress plugin, to fetch multilingual data.

[Polylang](https://gatographql.com/extensions/polylang): Integration with the Polylang
plugin, adding fields and filters to select the language when fetching data on a
multilingual site.

[Translation](https://gatographql.com/extensions/translation): Translate a field
value using the service provider of your choice, among ChatGPT, Claude, DeepSeek,
Mistral AI, DeepL, and Google Translate.

[WooCommerce](https://gatographql.com/extensions/woocommerce): Integration with 
WooCommerce, to fetch product data.

### Built with Gato GraphQL

All the plugins by [Gato Plugins](https://gatoplugins.com) use Gato GraphQL under
the hook.

You can use Gato GraphQL to do everything offered by Gato Plugins!

The plugins are:

[Gato AI Translations for Polylang](https://gatoplugins.com/plugins/ai-translations-for-polylang):
Automatically translate all content on your WordPress site, using the LLM of your
choice: ChatGPT, Claude, DeepSeek, Mistral AI, DeepL, and Google Translate.

## Screenshots

 * [[
 * GraphiQL client to execute queries in the wp-admin
 * [[
 * Interactively browse the GraphQL schema, exploring all connections among entities
 * [[
 * The GraphiQL client for the single endpoint is exposed to the Internet
 * [[
 * Interactively browse the GraphQL schema exposed for the single endpoint
 * [[
 * Persisted queries are pre-defined and stored in the server
 * [[
 * Requesting a persisted query URL will retrieve its pre-defined GraphQL response
 * [[
 * We can create multiple custom endpoints, each for a different target
 * [[
 * Endpoints are configured via Schema Configurations
 * [[
 * We can create many Schema Configurations, customizing them for different users
   or applications
 * [[
 * Custom endpoints and Persisted queries can be public, private and password-protected
 * [[
 * Manage custom endpoints and persisted queries by adding categories to them
 * [[
 * We can configure exactly what custom post types, options and meta keys can be
   queried
 * [[
 * Configure every aspect from the plugin via the Settings page
 * [[
 * Modules with different functionalities and schema extensions can be enabled and
   disabled
 * [[
 * Augment the plugin functionality and GraphQL schema via extensions
 * [[
 * The Tutorial section explains how to achieve many objectives, exploring all the
   elements from the GraphQL schema

## FAQ

### Can I use Gato GraphQL with popular plugins (WooCommerce, ACF, Yoast, etc)?

Yes, you can. Either there are specific integrations for them (eg: Polylang), of
there are elements in the GraphQL schema to interact with generic elements.

For instance, you can use field `customPost` to retrieve WooCommerce products, and
field `metaValue` to retrieve Advanced Custom Fields and Yoast SEO metadata.

### Does the plugin provide documentation?

The Gato GraphQL website contains extensive documentation:

 * [Guides](https://gatographql.com/guides) on configuring and using the plugin
 * [Extensions reference](https://gatographql.com/extensions-reference) docs
 * [Queries library](https://gatographql.com/library) with examples of GraphQL queries
   for many use cases
 * [Schema tutorial](https://gatographql.com/tutorial) to learn all the elements
   of the GraphQL schema

### Can I watch videos demonstrating the plugin?

Sure you can. There are videos demonstrating how to use Gato GraphQL in:

 * The [Demos](https://gatographql.com/demos) page on gatographql.com
 * The [@GatoPlugins YouTube channel](https://www.youtube.com/@GatoPlugins)

### Can I extend the GraphQL schema with my custom types and fields?

Yes you can. Use the GitHub template [GatoGraphQL/ExtensionStarter](https://github.com/GatoGraphQL/ExtensionStarter)
to create an extension, and follow the documentation there.

### How does Gato GraphQL complement WP-CLI?

With Gato GraphQL you can query data from the WordPress database, and then inject
the results into a WP-CLI command (either to select a specific resource, or update
an option with some value, or other).

Check out guide [Complementing WP-CLI](https://gatographql.com/guides/code/complementing-wp-cli)
for a thorough description on how to do it.

### How do I use Gato GraphQL to build headless sites?

With Gato GraphQL you can create an endpoint that exposes the data from your WordPress
site. Then, within the framework of your choice, you can query the data and render
the HTML.

Among others, you can use any of these libraries/frameworks:

 * Apollo
 * React
 * Vue
 * Next.js
 * Nuxt
 * Hugo
 * Astro
 * VitePress
 * Svelte
 * Eleventy

### Can I run Gato GraphQL without WordPress?

Yes you can. Gato GraphQL can be included within any PHP-based application (not 
only WordPress), based on Laravel, Symfony, or any other.

Check guide [Running Gato GraphQL without WordPress](https://gatographql.com/guides/interact/running-gatographql-without-wordpress)
for the explanation on how to do it.

### Can I fetch Gutenberg block data with Gato GraphQL?

Yes you can. Check guide [Working with (Gutenberg) blocks](https://gatographql.com/guides/interact/working-with-gutenberg-blocks)
for the different ways in which we can query block data, and guide [Mapping JS components to (Gutenberg) blocks](https://gatographql.com/guides/code/mapping-js-components-to-gutenberg-blocks)
for an example.

### Does Gato GraphQL support WordPress Multisite?

Yes, it does. Gato GraphQL can be installed on a multisite network.

In addition, Gato GraphQL provides fields on the GraphQL schema to retrieve multisite
network data, allowing to use GraphQL to sync content across the multisite.

### How does Gato GraphQL compare against the WP REST API?

Check out the [Gato GraphQL vs WP REST API comparison](https://gatographql.com/comparisons/gatographql-vs-wp-rest-api).

### How to replace the WP REST API with Gato GraphQL?

Check out the [Replacing the WP REST API guide](https://gatographql.com/guides/intro/replacing-the-wp-rest-api-with-gatographql).

### How does Gato GraphQL compare against WPGraphQL?

Check out the [Gato GraphQL vs WPGraphQL comparison](https://gatographql.com/comparisons/gatographql-vs-wpgraphql).

### How to replace WPGraphQL with Gato GraphQL?

Check out the [Replacing WPGraphQL guide](https://gatographql.com/guides/intro/replacing-wpgraphql-with-gatographql).

### Can I migrate from WordPress to Laravel/Symfony/etc?

Yes you can. Even more, only the WordPress-specific packages to fetch WordPress 
data (posts, users, comments, etc) used by your application would need to be ported
to the new framework/CMS, and nothing else.

Check guide [Migrating your app from WordPress to another PHP framework or CMS](https://gatographql.com/guides/interact/migrating-gatographql-from-wordpress-to-another-php-framework-or-cms)
to learn more.

### What are Power Extensions needed for?

Power Extensions are sold in a bundle containing all of them. They are needed to
enhance the security of public APIs, add HTTP caching to speed up the application,
execute multiple queries in a single request, connect to external services, send
emails, and others.

### What are Premium Extensions needed for?

Premium Extensions are sold individually. Each extension provides some specific 
functionality, such as an integration with some specific WordPress plugin or external
service, or the ability to automate tasks.

### Does Gato GraphQL have a refund policy?

Yes it does. If you have purchased any Gato GraphQL product and found out that it’s
not the right tool to satisfy your needs, you have [30 days to ask for a refund](https://gatographql.com/refund-policy).

### Can I try out Gato GraphQL + all extensions?

Yes, you can [launch your own sandbox site](https://app.instawp.io/launch?t=gatographql-demo&d=v2)
to play with Gato GraphQL + all extensions, for free.

### Is the plugin open source?

Yes it is. The source code for the plugin is in GitHub repo [GatoGraphQL/GatoGraphQL](https://github.com/GatoGraphQL/GatoGraphQL).

The JavaScript source code for the blocks is under [layers/GatoGraphQLForWP/plugins/gatographql/blocks](https://github.com/GatoGraphQL/GatoGraphQL/tree/master/layers/GatoGraphQLForWP/plugins/gatographql/blocks).

## Reviews

![](https://secure.gravatar.com/avatar/7a46c10c4c76a2539400c4446353d7503b6dd46f9b00d0fee26f113378afbb2f?
s=60&d=retro&r=g)

### 󠀁[First class support – fantastic plugin!](https://wordpress.org/support/topic/first-class-support-fantastic-plugin/)󠁿

 [Philip Sola](https://profiles.wordpress.org/philsola/) July 16, 2025

Thank you Leo, for your time, patience and help improving and working on your plugin
to fill some gaps that me and my team were having on a recent project. It’s a fantastic
plugin, and when I approached Leo with some questions, and ideas for further improvements,
Leo was fully responsive, kind and quick to respond. His plugin and ongoing support
and help, has single handedly saved this project for us. I would highly recommend
Leo and his plugins to anyone.

![](https://secure.gravatar.com/avatar/a681939dcc76803f97edec02218c4b393c32f2c9f3fffcde0e9f4751348b80fe?
s=60&d=retro&r=g)

### 󠀁[Great plugin and support](https://wordpress.org/support/topic/great-plugin-and-support-1858/)󠁿

 [andreas67](https://profiles.wordpress.org/andreas67/) July 12, 2025

I am referring to the paid version of Gato GraphQL. There are endless possibilities
to simplify processes. The developer is very committed and also helps you with individual
solutions. The option to synchronize complete templates or pages with Bricks is 
really great and just one of many possibilities.

![](https://secure.gravatar.com/avatar/4f0ef294038989ca9f0131e0a0627b0c289f0c498e3bdeb97f21f6fe940065a8?
s=60&d=retro&r=g)

### 󠀁[⭐️⭐️⭐️⭐️⭐️ Excellent support from Leo.](https://wordpress.org/support/topic/%e2%ad%90%ef%b8%8f%e2%ad%90%ef%b8%8f%e2%ad%90%ef%b8%8f%e2%ad%90%ef%b8%8f%e2%ad%90%ef%b8%8f-excellent-support-from-leo/)󠁿

 [Julian Song](https://profiles.wordpress.org/julians3/) July 8, 2025

He helped me troubleshoot a tricky problem with the plugin setup. Great plugin and
top-notch customer service.

![](https://secure.gravatar.com/avatar/b7334ce6bad7ab85b4e8015b5a6fe4475b35bfb3e205546ff792729cb907027e?
s=60&d=retro&r=g)

### 󠀁[Gato GraphQL is an exceptional tool for automating WordPress.](https://wordpress.org/support/topic/gato-graphql-is-an-exceptional-tool-for-automating-wordpress/)󠁿

 [NerQuiles](https://profiles.wordpress.org/mcqueen22/) May 8, 2025

Gato GraphQL has completely revolutionized my WordPress workflow. Its power and 
flexibility let me craft precise, secure queries, with field-level access control
based on user role or IP. Automating tasks via hooks is incredibly straightforward
and saves hours of development time. Plus, the support team responds in record time
and knows every detail inside out. An essential investment for any headless project!

![](https://secure.gravatar.com/avatar/e0781db642e493b93ede79504687fdee83655815a64d26ee7c06ac4609c3b4b2?
s=60&d=retro&r=g)

### 󠀁[Gato GraphQL is a Total Weapon](https://wordpress.org/support/topic/gato-graphql-is-a-total-weapon/)󠁿

 [olmate](https://profiles.wordpress.org/olmate/) May 2, 2025

This plugin is hands down awesome. Gato GraphQL gives you serious power and control
over your site. If you’re serious about building at the next level—this is the tool
you want in your stack. No regrets at all. Super solid functionality, great docs,
and the dev (Leo) is incredibly switched on and responsive. 100% recommend.

![](https://secure.gravatar.com/avatar/492691ba53b9d65632f510ac39d8ef2d1f1498ac76715ab03060616f38c694f2?
s=60&d=retro&r=g)

### 󠀁[Very useful to extent your data extraction](https://wordpress.org/support/topic/very-useful-to-extent-your-data-extraction/)󠁿

 [tchamberlain](https://profiles.wordpress.org/tchamberlain/) April 30, 2025

need to work with your Wordpress data, then this is what you are looking for

 [ Read all 35 reviews ](https://wordpress.org/support/plugin/gatographql/reviews/)

## Contributors & Developers

“Gato GraphQL” is open source software. The following people have contributed to
this plugin.

Contributors

 *   [ leoloso ](https://profiles.wordpress.org/leoloso/)
 *   [ Team Gato GraphQL ](https://profiles.wordpress.org/gatographql/)

[Translate “Gato GraphQL” into your language.](https://translate.wordpress.org/projects/wp-plugins/gatographql)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/gatographql/), check
out the [SVN repository](https://plugins.svn.wordpress.org/gatographql/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/gatographql/) by
[RSS](https://plugins.trac.wordpress.org/log/gatographql/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 17.1.1

 * Fixed – Conflict with the “All In One Security” plugin (#3287)

#### 17.1.0

 * Improved – Updated Translation extension docs on using a self-hosted LLM (#3282)
 * Fixed – Fix missing images in JetEngine docs (#3279)
 * Fixed – Conflict with the “All In One Security” plugin (#3283)

#### 17.0.0

 * Breaking changes – Update GraphiQL to v5 (#3270)
 * Improved – Support multiple e-commerce providers to validate plugin license (#
   3271)
 * Improved – Validate plugin license against Gato’s new FluentCart-powered shop(#
   3278)
 * Fixed – Extensions: Show new version updates when clicking on the Show details
   link in Plugin updates (#0be1eb0)

#### 16.1.0

 * Added – The new “All Inclusive” bundle to Extensions (#3269)
 * Added – JetEngine extension for Gato GraphQL (#3264)
 * Added – Support executing bulk actions on users page (#3261)
 * Improved – Print logs in reverse order (#3260)
 * Improved – Allow indicating minimum memory needed by plugin (#3262)
 * Improved – Allow linking to documentation URL to increase memory for plugin (#
   3263)
 * Fixed – Applying `@objectRemoveProperties` on fields with type `StringValueJSONObject`(#
   3268)

#### 16.0.2

 * Fixed – Own Plugin CPT editor: Check that `get_current_screen` exists (eg: it
   doesn’t when editing Bricks templates) (#3259)

#### 16.0.1

 * Fixed – Revalidate commercial license (#3258)

#### 16.0.0

 * Breaking change – Renamed MenuItem fields: title to rawLabel, and rawTitle to
   titleAttribute (#3251)
 * Breaking change – Renamed MenuItem.classes to cssClasses (#3252)
 * Added – Menu mutations Root.createMenu, Root.updateMenu and Menu.update (#3253)
 * Added – MenuItem.itemType and MenuItem.objectType fields (#3249)
 * Improved – Include/exclude properties in MenuItem.itemDataEntries (#3250)
 * Improved – Trigger a hook action before initializing enum string possible values(#
   3254)
 * Improved – Support text-only classic-editor CPT for the plugin (#3255)
 * Fixed – Don’t initialize an input that includes itself (eg: MenuItemInput) (#
   3248)

#### 15.3.0

 * Added – MetaNamespacer service (#3241)
 * Pass extensions to the response error via FeedbackItemResolution (#3240)
 * Allow to execute Custom Settings bulk action after filtering posts (for standalone
   plugins) (#3242)

#### 15.2.1

 * Fixed – Issue in WordPress 6.9 where “\” in blocks is not serialized properly(#
   3240)

#### 15.2.0

 * Added – Field `_urlToCustomPostID` to get the custom post ID from a URL (#3229)
 * Include block’s `innerContent` property for `blockDataItems` and `blockFlattenedDataItems`
   fields (#3224)
 * Support `--fail-if-log-notifications` param to WP-CLI commands, to print IDs 
   only when a log entry was added during the execution (#3221)
 * Added documentation for new field `_htmlParseHTML5` in the Helper Function Collection
   extension (#3237)
 * `CustomPost.slug` can return empty string if not yet set (#3228)
 * In fields `blocks`, `blockDataItems`, and `blockFlattenedDataItems`, allow to
   not convert block content using HTML5 parser (#3230)
 * Tested up to WordPress 6.9 (#3238)
 * Fixed – Check slugPath is not empty when adding page parent by slugPath (#3218)
 * Fixed – Exception when passing field arg with value null (#3222)
 * Fixed – Querying taxonomy that is assigned to more than 1 CPT (#3225)
 * Fixed – Errors inside nested directives not passing the fields upwards when `
   nestErrorsInMetaDirectives` is false (#3226)
 * Fixed – The link on the `wpAdminEditURL` field to print `&` as `&` (not `&amp`)(#
   3227)
 * Fixed – “Undefined array key” warning (#3239)

#### 15.1.0

 * Added WooCommerce extension to docs (#3195)
 * Added `CodeNameJSONObject` input type (#3210)
 * Print descriptions in introspection for EnumStringScalarTypes (#3211)
 * Show “No values available” in description for EnumStrings (#a3dafbf7)
 * Allow returning null values in field connections of type List (#3212)
 * Fixed – Cast post ID to int (for if 3rd-party CPT returns it as string) (#3213)
 * Fixed – Meta not returned as array (#3214)
 * Fixed – QueryableInterface adapter (#3215)
 * Fixed – CustomPostMeta module depends on Meta module (#3216)
 * Fixed – Exception when printing admin_notices before plugin is initialized (#
   3217)

#### 15.0.0

 * Breaking change: Removed the BasicService trait (#3208)
 * Add helper methods to check if requesting public GraphQL API (#3207)
 * Added – Chain defining environment settings across extensions (#3209)

#### 14.0.3

 * Fixed “Service not found” issue when storing “Schema Elements Configuration” 
   Settings (#3206)

#### 14.0.0

 * Breaking change: Upgraded min PHP version from 7.4 to 8.1 (#3200)
 * Breaking change: Pass `object` param to `resolveMetaKeysValue` (#3177)
 * Added `parent` field to `CustomPost` (#3159)
 * Pass parent on custom post mutations (#3160)
 * Added `slugPath` field to CustomPost (comprising the slug for all ancestor posts)(#
   3163)
 * Added fields `GenericCustomPost.ancestors` and `Page.ancestors` (#3167)
 * Added fields `children` and `childCount` to `GenericCustomPost` (#3168)
 * Added field `Category.ancestors` (#3169)
 * Added field `CustomPost.menuOrder` (#3172)
 * Added `menuOrder` arg to custom post mutations (#3173)
 * Append selected option value in dropdown in Settings if it doesn’t exist (#3178)
 * Allow storing JSON data for options in Settings (#3179)
 * Upgrade plugin to latest dependencies for PHP 8.1 (#3202)
 * Print body of failing requests in error logs (#3155)
 * Support executing bulk actions with custom settings (#3156)
 * Support reading just-updated plugin settings in options.php (#3157)
 * Added convenient method to handle Ajax Requests (#3180)
 * Allow executing further functionality on the Settings page (#3181)
 * Show notification labels in different colors for different severities (#3184)
 * Enable log notifications for warnings by default (#3185)
 * Support executing WP-CLI commands (#3188)
 * Validate the domain in the active license corresponds to the current site (for
   commercial extensions) (#3192)
 * Don’t trigger license check if never run before (#3194)
 * Set `WithMeta.metaKeys` as sensitive field (#3197)
 * Move `isOneOf` introspection field out of `extensions` (as feature has been merged
   to GraphQL spec) (#3198)
 * Fixed bug where querying `post(by: { id: 0 })` returns `null` (instead of the
   post in the loop) (#3165)
 * Fixed plugin not working with PHP 7.4 (#3182)
 * Fixed updating posts storing wrong date (#3186)
 * Fixed – User authentication when executing query triggered via the WP REST API(#
   3187)
 * Fixed – Requesting GraphQL endpoint using Application Passwords didn’t work when
   WooCommerce is installed (#3195)

#### 13.2.0

 * Added field `CustomPost.rawStatus` (as it exists in the database, eg: `publish`
   instead of `future`) (#3142)
 * Added `future` and `inherit` statuses to the `CustomPostStatus` enum (#3142)
 * Added – Filter custom posts and media items by “slugs” (#3143)
 * Added – Date parameter to `createMediaItem` mutation (#3146)
 * Added – Option to create media items from unsafe URLs (#3149)
 * Added – Fields `srcs`, `widths`, and `heights` (to fetch data for several `sizes`)
   to type `Media` (#3149)
 * Added documentation for new field `_arrayDeepFlatten` from the **Helper Function
   Collection** extension (#3153)
 * Updated dependencies to latest version (#3145)
 * Fixed – Don’t validate promises inside array of arrays (#3144)
 * Fixed – Don’t fail validation for already-coerced values on inputs containing
   both a dynamic variable and a custom scalar (#3150)
 * Fixed exception in Extensions page (#3151)

#### 13.1.1

 * Handle empty response when LemonSqueezy service is down (#3139)
 * Fixed exception in Extensions page (#3140)

#### 13.1.0

 * Enable extensions if required theme is active (#3114)
 * Allow extension dependencies on themes (#3115)
 * Documentation for new Bricks Premium Extension (#3117)
 * Documentation for the new `@exportFrom` directive from **Multiple Query Execution**(#
   3121)
 * Documentation for the updated `@passOnwards` directive from **Field to Input**(#
   3122)
 * Added `NonEmptyString` custom scalar (#3124)
 * Added `IdentifierString` custom scalar (#3125)
 * Added new input `IncludeExcludeFilterInput` (#3127)
 * Added documentation for new fields `_strArrayReplace` and `_strArrayReplaceMultiple`
   from the **PHP Functions via Schema** extension (#3129)
 * Added field `optionObjectValues` (#3133)
 * Support for “partial” errors (shown in the response, but not bubbled up on nested
   directives) (#3135)
 * Support markdown in logs (#3136)
 * Print errors before warnings in the response (#3134)
 * Allow reinstalling plugin initial data when plugin/theme dependency is activated/
   deactivated (#3119)
 * Made `customPostType` param on the `updateCustomPost` mutation optional (#3120)
 * Use `NonEmptyString` for `slug` on custom post mutations (#3126)
 * Assign default value to configuration items added after the Settings was saved
   to DB (#3130)
 * Fixed: Returning no results from `get_posts` when passing many CPTs (#3128)
 * Fixed: Exception thrown when multiple fields have errors (#3137)

#### 13.0.2

 * Fixed: Do not show the notification count badge in the plugin menu if the Logs
   page is not enabled (#3112)

#### 13.0.0

 * Breaking change: Replaced methods in `Logger`: `logInfo` and `logError` => `log(
   severity: ...)` (#3093)
 * Breaking change: Split `Logger` service into `Logger` and `SystemLogger` (#3098)
 * Breaking change: Moved “Logs” from “General” tab to new “Logs” tab in the Settings(#
   3103)
 * Enable logs by severity in the Settings (#3095)
 * Add Logs page to the menu, to browse the logs (#3100)
 * Split Logs by sources and date (#3100)
 * Logs count badge in the Logs menu link (#3105)
 * Print the severity (`SUCCESS`/`INFO`/`WARNING`/`ERROR`) in the logs (#3099)
 * Use the Logger also when using plugin as standalone (without WordPress) (#3104)
 * Fixed: Error type for “Custom post does not exist” was missing from union types(#
   3109)

#### 12.2.0

 * Fixed: Exception when clicking on Extensions link (#3092)

#### 12.1.0

 * Added a Plugin Integration Configuration category on Settings (#3089)
 * Don’t escape HTML forward slashes in GraphQL response errors (#3090)
 * Encode multibyte Unicode characters in GraphQL response errors (#3091)

#### 12.0.1

 * Fixed: Convert stdClass to array also on `meta` mutation input (#3088)

#### 12.0.0

 * Added documentation for new Elementor Premium Extension (#3052)
 * Convert stdClass to associative array when storing meta in the DB (#3082)
 * Improve error message when casting to `NullableListValueJSONObject` fails (#3083)
 * Added `meta` input field to the `createPage` mutation (#3085)
 * Added “Post Meta Mutations” and “Page Meta Mutations” modules (#3086)
 * Breaking change: Plugin constructor signature receives nullable `commitHash` 
   param (#3056)
 * Breaking change: Store the extension names whose license has just been activated(
   instead of a timestamp) to install setup data (#3057)
 * Breaking change: Renamed `getCommentPostID` to `getCommentCustomPostID` (#3073)
 * Fixed: Avoid `_load_textdomain_just_in_time` error message in WP 6.8 (#3084)
 * Fixed: Loading page entity in `customPost` field as result of mutation (#3087)

#### 11.3.1

 * Use `DangerouslyNonSpecificScalar` instead of `AnyScalarScalar` type for `metaValue`
   field, to allow retrieving lists (eg: for ACF) (#3080)

#### 11.3.0

 * Added fields `meta: ListValueJSONObject!` and `metaKeys: [String!]!` for types`
   Comment/CustomPost/TaxonomyTerm/User` (#3060)
 * Added meta mutations
    - Custom posts (#3067)
    - Categories (#3063)
    - Tags (#3064)
    - Users (#3072)
    - Comments (#3072)
 * Added type `ListValueJSONObject` (#3060)
 * Added documentation for new field `_objectRecursiveReplace`, from the **Schema
   Functions** extension (#3074)
 * Made meta field `metaValue` handle any scalar type (previously only `String`)(#
   3061)
 * Made meta field `metaValues` handle any scalar type (previously only built-in
   ones), such as `JSONObject` (#3061)
 * Allow to hook inputs into tag/category mutations (#3062)
 * Tested up WordPress 6.8
 * Fixed: Passing a non-`post` CPT to `updatePost` will show an error (#3070)
 * Fixed: Translation loading error message in WordPress 6.8 (73a9f11)

#### 11.2.0

 * Support fetching Page Builders data in the GraphQL schema (#3051)
 * Added documentation for new field `_objectMerge`, from the **Schema Functions**
   extension (#3050)
 * Fixed: Malcare deactivate triggers Exception (#3054)
 * Fixed: Install plugin setup data on first request after activating license (#
   3055)

#### 11.1.2

 * Support `password` type in multi-inputs in Settings (#3047)
 * Use `password` type to activate extensions in Settings (#3048)
 * Fixed: Hook `template_include` can receive `null` values (error may happen when
   WooCommerce is installed) (#3049)

#### 11.0.4

 * Fixed: Do not remove the Screen Options tab on the post list page (#3046)

#### 11.0.0

 * Important: If you have any extension installed (eg: the **“Power Extensions” 
   bundle**), you need to update **Gato GraphQL** first! Otherwise the application
   will throw an exception.
 * Breaking change: Register `changelogURL` for the extensions, to show the new 
   version’s changelog when updating them (#3042)
 * Updated documentation for the **Translation** extension, adding new translation
   providers: **Mistral AI** (#3043) and **DeepSeek** (#3044)

#### 10.5.0

 * Enable multiple checkbox options in Settings (#3040)
 * Fixed: If the GMT date is stored as `"0000-00-00 00:00:00"`, then use the non-
   GMT date (#3041)

#### 10.4.0

 * Added password input on Settings (#3035)
 * Added `date` input on custom post mutations (`createPost`, `updatePost`, `createCustomPost`,
   and `updateCustomPost`) (#3036)
 * Added `gmtDate` input on custom post mutations (`createPost`, `updatePost`, `
   createCustomPost`, and `updateCustomPost`) (#3038)
 * Updated **Translation** extension docs with **Claude** as translation provider(#
   3039)
 * Removed stale polyfill interface `DateTimeInterface` (for PHP 7.2) (#3037)

#### 10.3.0

 * Updated documentation for the **Response Error Trigger** module, adding the new`
   _warn` field and `@warn` directive (#3034)
 * Use the smaller images between PNG and WEBP (#3031)

#### 10.2.0

 * Added documentation for new field `_generateRandomString` in the Helper Function
   Collection extension (#3027)
 * Plugin updates: Use the same icon as the Gato GraphQL plugin for the extensions(#
   3022)
 * Allow to install setup data every time that the plugin is updated (#3028)
 * Convert all png images to webp (#3029)
 * [Extensions][Helper Function Collection] Added field `_generateRandomString`
 * [Extensions][Translation] Pass language + country code on `@strTranslate(to:)`

#### 10.1.0

 * Added YouTube video for the Automation extension doc (#93311e2)
 * Completed documentation for extensions:
    - [Schema Functions] New fields `_arrayEncodeAsJSONString` and `_objectEncodeAsJSONString`(#
      3013)
    - [Helper Function Collection] New field `_arrayOfJSONObjectsExtractPropertiesAndConvertToObject`(#
      3018)
 * Order tabs in Settings by priority (#3014)
 * Added documentation for new extension “Translation” (replacing “Google Translate”
   and “DeepL”) (#3016)
 * Allow to create custom posts as `private` (#3019)
 * Allow printing textarea options in Settings (#3020)
 * Fixed: Exception when serializing an array value (#3017)
 * [Extensions][Schema Functions] Added fields `_arrayEncodeAsJSONString` and `_objectEncodeAsJSONString`
 * [Extensions][Helper Function Collection] Added field `_arrayOfJSONObjectsExtractPropertiesAndConvertToObject`
 * [Extensions][Google Translate] Fixed: Make the `@strTranslate` directive send
   not more than 128 strings to translate

#### 10.0.0

 * Breaking changes: Changed signature of method `validateDirectiveArgValue`, passing
   the `$directiveArgs` param when validating a single directive arg (#2989)
 * Breaking changes: Made params to method `assertIsValid` non-nullable (#2998)
 * Added GraphQL type `StringListValueJSONObject` (#2991)
 * Added YouTube videos to the extension docs (#9b95be5)
 * Added documentation for Premium Extensions (#2994)
 * Settings: For entries of the “Key => Label” type (eg: Extension license keys),
   allow to use a select input to print preselected values (#2988)
 * Fixed: Container not generated properly in certain hosts (`@required` attribute
   disregarded) (#3009)
 * Fixed: Use the Gutenberg Editor for the plugin CPTs (when Classic Editor active)(#
   3011)

#### 9.0.0

 * Breaking change: Changed signature of method `assertCommercialLicenseHasBeenActivated`(#
   2978)
 * Only register block JS scripts when in allowed CPT (#2975)
 * Enable updating extensions from Plugins page after major release (#2978)
 * Improve performance when caching resolvers for a queried field (#2981)
 * Fixed: Catch exception from SymfonyDI on `admin_init` hook (#2974)
 * Fixed: Show “Visit plugin site” link instead of “View details” for extensions(#
   2976)
 * Fixed “Deprecated: Calling get_parent_class() without arguments is deprecated”(#
   2977)
 * Fixed Elementor not loading widgets with Gato GraphQL active (#2986)
 * [Extensions][Helper Function Collection] Added field `_arrayFlatten`

#### 8.0.0

 * Extensions (eg: the “All Extensions” bundle) can now be updated from the Plugins
   page (#2972)

#### 7.0.8

 * Fixed: Don’t hardcode Gato GraphQL’s plugin base name in `plugin_action_links`
   hook to allow standalone plugins to use it (#2971)

#### 7.0.5

 * When an extension is activated, execute `flush_rewrite_rules` only at the end(
   or CPTs are not loaded properly) (#2970)

#### 7.0.4

 * Do not print block editor scripts in the frontend (#2966)
 * Do not print block editor stylesheets in the frontend (#2967)

#### 7.0.3

 * Allow method handling hook `allowed_block_types_all` to receive `null` (#2965)

#### 7.0.2

 * Changed label in Settings form button to “Save Changes (all from this tab)”

#### 7.0.1

 * Renamed “Gato GraphQL Shop” to “Gato Shop”

#### 7.0.0

 * Breaking change: Bump minimum required PHP version to 7.4 (#2905)
 * Breaking change: Allow to include Gato GraphQL as the engine to power another
   standalone plugin (#2897)
 * Breaking change: Renamed env var `CACHE_DIR` to `CONTAINER_CACHE_DIR` (#2923)
 * Added convenience class for standalone plugins (#2899)
 * Allow to fetch posts with `auto-draft` status (#2911)
 * Allow disabling the private endpoint (#2913)
 * Added field `useGutenbergEditorWithCustomPostType` (#2960)
 * Fixed: Fetching raw attribute sources with multiple nodes in blocks (#2909)
 * [Extensions][Persisted Queries] Created a new “Persisted Query Endpoints” module(
   from “Persisted Queries”), to disable external execution of persisted queries

#### 6.0.2

 * Fixed: Remove global fields from schema when disabled via ACL (#2894)
 * Fixed: Global fields duplicated in schema with nested mutations enabled (#2895)

#### 6.0.0

 * Action required: When updating the plugin (i.e. not installing anew), you need
   to deactivate and then re-activate the plugin. Until then, the “GraphiQL” and“
   Schema” items won’t appear on the menu (due to the newly-added “Schema Editing
   Access” module, see below)
 * Breaking change: Removed custom endpoints and persisted queries (#2852)
 * Breaking change: The single endpoint is enabled by default (#2859)
 * Breaking change: The single endpoint GraphiQL/Voyager clients are disabled default(#
   2860)
 * Breaking change: The Schema Configuration module is disabled by default (#2848)
 * Breaking change: The schema tutorial page is hidden by default (#2856)
 * Breaking change: On the settings page, the configuration for items under “Schema
   Elements Configuration” need to be set again (#2861)
 * Tested up to WordPress 6.7 (#2887)
 * Do not display Endpoint Categories if there are no endpoint CPTs enabled (#2849)
 * Hide “API Hierarchy” module if there are no endpoint CPTs enabled (#2850)
 * Hide “Excerpt as description” module if there are no CPTs enabled (#2851)
 * Display the “Enable Logs?” settings only when some extension is using it (#2853)
 * Hide the Schema tutorial page by default (#2854)
 * Reorganized the Settings, splitting “Schema Configuration” into 2 elements: “
   Schema Configuration” and “Schema Elements Configuration” (#2861)
 * Improved documentation for extensions (#2866)
 * Added links to online docs on the Settings page (#2875)
 * Added “Schema Editing Access” module (#2877)
 * [Extensions][Schema Functions] If `from` email not provided in `_sendEmail` mutation,
   use the blog’s admin email

#### 5.0.0

 * Breaking change: Bumped minimum WordPress version to 6.1 (#2811)
 * Breaking change: Return no results when filtering data by an empty array (#2809)
 * Increase limit of chars in truncated response by Guzzle (#2800)
 * Added field `isGutenbergEditorEnabled` (#2801)
 * Use `isGutenbergEditorEnabled` in predefined persisted queries (#2802)
 * Added mutations to assign custom tags/categories to custom posts (#2803)
 * Added Settings option to enable/disable logs (#2813)
 * Application password failed authentication: Show error in GraphQL response (#
   2817)
 * Added predefined persisted queries:
    - [PRO] Import post from WordPress RSS feed and rewrite its content with ChatGPT(#
      2818)
    - [PRO] Import new posts from WordPress RSS feed (#2819)
    - [PRO] Import HTML from URLs as new posts in WordPress (#2822)
 * Support additional taxonomies for mutations on post tags/categories (not only`
   post_tag` and `category`) (#2823)
 * Added taxonomy field also to `PostTag` and `PostCategory` types (#2824)
 * Made taxonomy input not mandatory on `Root.tags/categories` and `CustomPost.tags/
   categories` fields (#2827)
 * Fixed: Add `featuredImage` field on `GenericCustomPost` (#2806)
 * Fixed: On fields `blocks`, `blockDataItems`, and `blockFlattenedDataItems`, avoid
   error when post has no content (#2814)
 * Fixed: Pass mandatory `attrs` field when creating persisted query blocks (#3adde2e)
 * [PRO] Updated mapped WordPress hooks for automation

#### 4.2.0

 * Added mutations for categories (#2764)
 * Added mutations for tags (#2765)
 * Validate `assign_terms` capability on `setCategory` and `setTag` mutations (#
   2772)
 * Create a media item using the attachment from an existing media item (#2787)
 * Added field `Media.parentCustomPost` (#2788)
 * Added mutation `Root.updateMediaItem` (#2790)
 * Added predefined persisted queries:
    - Create missing translation categories for Polylang (#2774)
    - Create missing translation tags for Polylang (#2774)
    - Translate categories for Polylang (#2774)
    - Translate tags for Polylang (#2774)
    - Translate categories for MultilingualPress (#2774)
    - Translate tags for MultilingualPress (#2774)
    - Create missing translation media for Polylang (#2789)
    - Translate media for Polylang (#2789)
 * Added translation language mapping to persisted queries (#2775)
 * Fixed exception when initializing the GraphQL Internal Server query on `add_attachment`(#
   2796)
 * [PRO] Define the Polylang language on tag and category mutations
 * [PRO] Automation: Store the GraphQL response in the info logs
 * [PRO] Added Polylang Mutations for Media Items
 * [PRO] Map additional WordPress hooks for Automation
 * [PRO] Filter entities by Polylang’s default language

#### 4.1.0

 * Send the referer on Guzzle requests (#2754)
 * Use `@strQuoteRegex` in predefined persisted queries (#2758)
 * [PRO] Polylang: Filter data by language
 * [PRO] Use enums types to return Polylang language codes, locales and names
 * [PRO] Automation: Handle `new` and `auto-draft` old status in `{$old_status}_to_{
   $new_status}` hook (#1376)
 * [PRO] Predefined automation rules: In addition to `draft_to_publish`, also trigger
   from `new`, `auto-draft`, `pending`, `future`, and `private` states
 * [PRO] Added field `_strQuoteRegex` and directive `@strQuoteRegex`
 * [PRO] Fixed: Plugin throwing exception on PHP 7.2

#### 4.0.0

 * Breaking change: Updated internal PHP hook structure for error payloads (#2739)
 * Use bulk mutations in predefined persisted queries (#2728)
 * Added documentation for new PRO module **Polylang Mutations** (#2733)
 * Added documentation for new PRO field `_arrayIntersect` (#2735)
 * Added predefined persisted query:
    - [PRO] Create missing translation posts for Polylang (#2740)
 * Fixed: Don’t replace chars in translation persisted queries (#2731)
 * Fixed: “Call to protected method” exception in PHP 8.2 (#2741)
 * [PRO] Breaking change: Rename field `_intSubstract` to `_intSubtract`
 * [PRO] Breaking change: Rename directive `@intSubstract` to `@intSubtract`
 * [PRO] Breaking change: Renamed field `polylangEnabledLanguages` to `polylangLanguages`
 * [PRO] Breaking change: Fields `polylangLanguage`, `polylangDefaultLanguage` and`
   polylangLanguages` return type `PolylangLanguage` instead of `String`
 * [PRO] Breaking change: Renamed inputs `language` to `languageBy` and `polylangLanguage`
   to `polylangLanguageBy`
 * [PRO] Added **Polylang Mutations**
 * [PRO] Added field `_arrayIntersect`

#### 3.0.0

 * Breaking change: Require at least WordPress v6.0 (#2719)
 * Breaking change: Option “Do not use payload types for mutations (i.e. return 
   the mutated entity)” in schema configuration block “Payload Types for Mutations”
   must be re-selected (#2720)
 * Added compatibility with WordPress 6.6 (#2717)
 * Added bulk mutation fields (for all mutations in the schema) (#2721)
 * Added fields to query the mutation payload objects (#2720)
 * Added option to schema configuration block “Payload Types for Mutations” (#2720)
 * Added predefined custom endpoint “Bulk mutations” (#2720)
 * Removed predefined custom endpoint “Nested mutations + Entity as mutation payload
   type” (#2720)
 * Fixed bug: Catch exception if dependency version is not semver (#2712)
 * Fixed bug: Convert entries in JSON dictionary of variables in persisted query
   from array to object (#2715)

#### 2.6.0

 * Added `siteURL` field (#2697)
 * Added fields to fetch multisite data (#2698)
 * Added documentation for PRO integration with MultilingualPress (#2699)
 * Added documentation for new PRO field `_strRegexFindMatches` (#2708)
 * Added GraphQL variables `$translateFromLanguage`, `$includeLanguagesToTranslate`
   and `$excludeLanguagesToTranslate` to persisted queries (#2694 / #2700):
    - [PRO] Translate posts for Polylang (Gutenberg)
    - [PRO] Translate posts for Polylang (Classic editor)
 * Added scalar types to the GraphQL schema:
    - `IntValueJSONObject` (#2703)
    - `IDValueJSONObject` (#2704)
 * Added predefined persisted queries:
    - [PRO] Translate posts for MultilingualPress (Gutenberg) (#2706)
    - [PRO] Translate posts for MultilingualPress (Classic editor) (#2706)
    - [PRO] Translate Poedit file content (#2709)
 * [PRO] Added integration with MultilingualPress
 * [PRO] Added input `valueWhenNonExistingKeyOrPath` to field `_objectProperty`
 * [PRO] Added automation rules:
    - MultilingualPress: When publishing a post, translate it to all languages (
      Gutenberg)
    - MultilingualPress: When publishing a post, translate it to all languages (
      Classic editor)
 * Added Gato GraphQL intro video to documentation (#2707)
 * Fixed identifying extension in `createMediaItem` when filename has more then 
   one dot

#### 2.5.2

 * Fixed bug: Initialize blocks only after their corresponding CPTs (#2693)

#### 2.5.1

 * Fixed tabs in Markdown in new persisted query **[PRO] Send email to users about
   post**

#### 2.5.0

 * Added predefined persisted queries
    - [PRO] Send email to users about post (#2692)
 * Added documentation for “WordPress hook mapping” for the [PRO] Automation extension(#
   2691)

#### 2.4.1

 * Fixed bug: Internal server error from passing string when expected int

#### 2.4.0

 * Added page mutations to the GraphQL schema (#2682)
 * Added fields to fetch the logged-in user’s pages (#2682)
 * Added fields to fetch the site’s locale and language (#2685)
 * Install “internal” private custom endpoint (#2684)
 * Support Application Passwords (#2672)
 * Added documentation for new PRO field `_strBase64Encode` (#2673)
 * Link extensions to the Extensions Reference in gatographql.com (#2675)
 * Added YouTube channel link to About page (#2676)
 * Added predefined persisted queries:
    - [PRO] Translate and create all pages for a multilingual site (Multisite / 
      Gutenberg) (#2688)
    - [PRO] Translate and create all pages for a multilingual site (Multisite / 
      Classic editor) (#2688)
 * Fixed: Open GraphiQL/Voyager clients in subfolder-based Multisite network (#2677)
 * Fixed: Highlight extensions and enable link to visit in website (#2674)
 * Fixed: GraphiQL client (for LocalWP) now uses site URL as endpoint (#2686)

#### 2.3.0

 * Added fields `GenericCustomPost.update`, `Root.updateCustomPost` and `Root.createCustomPost`(#
   2663)
 * Added documentation for integration with Polylang (#2664)
 * Added module type “Integrations” (#2665)
 * Return an EnumString type on `GenericCategory.taxonomy` and `GenericTag.taxonomy`(#
   2666)
 * Fix bug: Updated the Support form’s action URL (#2662)
 * Added predefined persisted queries: “[PRO] Translate posts for Polylang (Gutenberg)”(#
   2667), “[PRO] Translate posts for Polylang (Classic editor)” (#2667), “[PRO] 
   Sync featured image for Polylang” (#2669) and “[PRO] Sync tags and categories
   for Polylang” (#2670)
 * Support alternative filenames from 3rd-party plugins for extensions (#2671)
 * [PRO] Added integration with Polylang
 * [PRO] Added automation rules: “Polylang: When publishing a post, translate it
   to all languages (Gutenberg)”, “Polylang: When publishing a post, translate it
   to all languages (Classic editor)”, “Polylang: When publishing a post, set the
   featured image for each language on all translation posts” and “Polylang: When
   publishing a post, set the tags and categories for each language on all translation
   posts”

#### 2.2.3

 * Bug parsing `@export(as: $someVar)` (#2661)

#### 2.2.2

 * Adapted `blocks` field to work with WordPress 6.5 (#2657)
 * Tested up WordPress 6.5
 * Renamed “Tutorial” to “Schema tutorial”

#### 2.2.1

 * Added “Lesson (number): ” in the tutorials

#### 2.2.0

 * Do not include bundles in the Extensions page
 * Do not print the required extensions on predefined persisted queries

#### 2.1.3

 * Added documentation for fields `_arrayFlipToObject` and `_objectIntersectKey`
   from the PHP Functions via Schema extension
 * Added documentation for field `_arrayOfJSONObjectsExtractProperty` from the Helper
   Function Collection extension

#### 2.1.0

 * Support providing the Schema Configuration to apply when invoking the Internal
   GraphQL Server
 * Added predefined persisted query “Insert block in post”
 * If initializing the service container from the cache fails, fallback to initializing
   PHP object from memory (#2638)
 * Give unique operationName to all predefined persisted queries (#2644)
 * Improved error message when fetching blocks from a post, and the block content
   has errors
 * Completed documentation for the Automation extension (#2651)
 * On the “Generate a post’s featured image using AI and optimize it” predefined
   persisted query, execute logic only if the post title is not empty (#ec931dd)
 * Fixed bug in multi-control JS component used by extensions (Access Control, Cache
   Control, and Field Deprecation) showing “undefined” on the block on the Schema
   Configuration (#2639)
 * Fixed bug in regex replacements in predefined persisted queries (#2649)
 * Avoid reinstalling plugin setup data if deactivating/reactivating the plugin (#
   2641)
 * Handle error from passing WP_Post as GraphQL variable to the Internal GraphQL
   Server (#2652)

#### 2.0.0

 * Added new module Media Mutations
 * Added mutation `createMediaItem`
 * Added fields `myMediaItemCount`, `myMediaItems` and `myMediaItem`
 * Added predefined persisted query “Generate a post’s featured image using AI and
   optimize it”
 * Added documentation for new field `_dataMatrixOutputAsCSV` from the Helper Function
   Collection extension
 * Validate the license keys when updating the plugin
 * Simplified the Tutorial section
 * Prevent max execution time issues when installing plugin on (cheap) shared hosting(#
   2631)
 * Fixed bug where a syntax error on a variable definition in the GraphQL query 
   was not validated
 * Breaking change: Field resolver’s `validateFieldArgValue` method receives extra
   argument `$fieldArgs`

#### 1.5.4

 * Fixed bug in resolver where innerBlocks is not set

#### 1.5.3

 * Point the “Missing an extension?” link to the Contact us page
 * Add link to bundles on the Extensions page
 * Fixed typo in readme.txt

#### 1.5.2

 * Active bundle or extension, with different version than main plugin, did not 
   show “Active” button in Extensions page

#### 1.5.1

 * Improved description on readme.txt (for the WordPress plugin directory)

#### 1.5.0

 * Added video to documentation for bundle
 * Added new predefined persisted queries: “Send email to admin about post” and “
   Add comments block to post”

#### 1.4.0

 * Added predefined custom endpoint “Nested mutations + Entity as mutation payload
   type”
 * Added “Request headers” to GraphiQL clients on single public/private endpoint,
   and custom endpoints
 * Renamed page “Recipes” to “Tutorial”, and added settings to hide it
 * Renamed existing bundles (“Application Glue & Automator” bundle => “Tailored 
   WordPress Automator” bundle, “Content Translation” bundle => “Simplest WordPress
   Content Translation” bundle and “Public API” bundle => “Responsible WordPress
   Public API” bundle)
 * Added documentation for new bundles (“Automated Content Translation & Sync for
   WordPress Multisite” bundle, “Better WordPress Webhooks” bundle, “Easy WordPress
   Bulk Transform & Update” bundle, “Private GraphQL Server for WordPress” bundle,“
   Selective Content Import, Export & Sync for WordPress” bundle, “Unhindered WordPress
   Email Notifications” bundle and “Versatile WordPress Request API” bundle)
 * Fixed HTML codes were printed in select inputs in the WordPress editor, now removed

#### 1.3.0

 * Read `GET` variables when executing Persisted Queries via `POST`
 * Pass data via URL params in persisted query “Register a newsletter subscriber
   from InstaWP to Mailchimp”
 * Fixed component docs displayed in the editor were not included in the plugin

#### 1.2.0

 * Added `XML` scalar type
 * Added documentation for new field `_strDecodeXMLAsJSON` from the Helper Function
   Collection extension
 * Added documentation for new field `_strParseCSV` …

## Meta

 *  Version **17.1.1**
 *  Last updated **3 weeks ago**
 *  Active installations **70+**
 *  WordPress version ** 6.1 or higher **
 *  Tested up to **6.9.4**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [api](https://wordpress.org/plugins/tags/api/)[decoupled](https://wordpress.org/plugins/tags/decoupled/)
   [GraphQL](https://wordpress.org/plugins/tags/graphql/)[headless](https://wordpress.org/plugins/tags/headless/)
   [webhook](https://wordpress.org/plugins/tags/webhook/)
 *  [Advanced View](https://wordpress.org/plugins/gatographql/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  36 5-star reviews     ](https://wordpress.org/support/plugin/gatographql/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/gatographql/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/gatographql/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/gatographql/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/gatographql/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/gatographql/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/gatographql/reviews/)

## Contributors

 *   [ leoloso ](https://profiles.wordpress.org/leoloso/)
 *   [ Team Gato GraphQL ](https://profiles.wordpress.org/gatographql/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/gatographql/)