Skip to main content
Agency Program Get 2× more leads and save 50% on hosting. Built for agencies ready to grow. Book a call
WPGraphQL icon

WPGraphQL

v2.0.0
by Jason Bahl · 4.9 (47 reviews)

WPGraphQL is a free, open-source WordPress plugin that provides an extendable GraphQL schema and API for any WordPress site.

30K+ active installs Updated Feb 14, 2025 Tested to 6.7.2 Requires PHP 7.4
Try Demo Download
Pre-installed Ready in ~10s No card
WPGraphQL

About WPGraphQL

WPGraphQL is a WordPress plugin that adds a GraphQL schema and API to your WordPress site, allowing for efficient querying and interaction with your site's data. It is easy to install and has key features such as a flexible API, extendable schema, compatibility with modern frameworks, and optimized performance. It is also becoming a Canonical Plugin on WordPress.org, ensuring long-term support and a growing community of users and contributors.

Screenshots

WPGraphQL screenshot
WPGraphQL screenshot

Frequently asked questions

What is WPGraphQL?
WPGraphQL is a free, open-source WordPress plugin that provides an extendable GraphQL schema and API for any WordPress site.
How can I get started with WPGraphQL?
You can get started with WPGraphQL by visiting the links below:n- [WPGraphQL.com](https://www.wpgraphql.com)n- [Quick Start Guide](https://wpgraphql.com/docs/quick-start)n- [Intro to GraphQL](https://wpgraphql.com/docs/intro-to-graphql)n- [Intro to WordPress](https://wpgraphql.com/docs/intro-to-wordpress)n- [Join the WPGraphQL community on Slack](https://join.slack.com/t/wp-graphql/shared_invite/zt-3vloo60z-PpJV2PFIwEathWDOxCTTLA)
What frameworks and tools can I use with WPGraphQL?
WPGraphQL works great with the following frameworks and tools:n- [Gatsby](https://gatsbyjs.com)n- [Apollo Client](https://www.apollographql.com/docs/react/)n- [NextJS](https://nextjs.org/)n- ...and more
How does GraphQL help with fetching data?
With GraphQL, the client makes declarative queries, asking for the exact data needed, and in exactly what was asked for is given in response, nothing more. This allows the client have control over their application, and allows the GraphQL server to perform more efficiently by only fetching the resources requested.
What are the benefits of using GraphQL for fetching resources?
GraphQL queries allow access to multiple root resources, and also smoothly follow references between connected resources. While typical a REST API would require round-trip requests to many endpoints, GraphQL APIs can get all the data your app needs in a single request. Apps using GraphQL can be quick even on slow mobile network connections.

Changelog

1.32.1

Chores / Bugfixes

  • #3308: fix: update term mutation was preventing terms from removing the parentId

1.32.0

New Features

  • #3294: feat: introduce new fields for getting mediaItem files and filePaths

Chores / Bugfixes

  • update stable tag

1.31.0

New Features

  • #3278: feat: add option to provide custom file path for static schemas when using the wp graphql generate-static-schema command

Chores / Bugfixes

  • #3284: fix: fix: Updated docs link for example of hierarchical data
  • #3283: fix: Error in update checker when WPGraphQL is active as an mu-plugin

1.30.0

Chores / Bugfixes

  • #3250: fix: receiving post for Incorrect uri
  • #3268: ci: trigger PR workflows on release/* branches
  • #3267: chore: fix bleeding edge/deprecated PHPStan smells [first pass]
  • #3270: build(deps): bump the npm_and_yarn group across 1 directory with 3 updates
  • #3271: fix: default cat should not be added when other categories are added

New Features

  • #3251: feat: implement SemVer-compliant update checker
  • #3196: feat: expose EnqueuedAsset.group and EnqueuedScript.location to schema
  • #3188: feat: Add WPGraphQL Extensions page to the WordPress admin

1.29.3

Chores / Bugfixes

  • #3245: fix: update appsero/client to v2.0.4 to prevent conflicts with WP6.7
  • #3243: chore: fix Composer autoloader for WPGraphQL.php
  • #3242: chore: update Composer dev deps
  • #3235: chore: general updates to README.md and readme.txt
  • #3234: chore: update quick-start.md to provide more clarity around using wpackagist

1.29.2

Chores / Bugfixes

  • fix: move assets/blueprint.json under .wordpress-org directory

1.29.1

Chores / Bugfixes

  • #3226: chore: add blueprint.json so WPGraphQL can be demo’d with a live preview on WordPress.org
  • #3218: docs: update upgrading.md to highlight how breaking change releases will be handled
  • #3214: fix: lazy-resolve Post.sourceUrl and deprecate Post.sourceUrlsBySize
  • #3224: chore(deps-dev): bump symfony/process from 5.4.40 to 5.4.46 in the composer group
  • #3219: test: add tests for querying different sizes of media items
  • #3229: fix: Deprecated null value warning in titleRendered callback

1.29.0

New Features

  • #3208: feat: expose commenter edge fields
  • #3207: feat: introduce get_graphql_admin_notices and convert AdminNotices class to a singleton

Chores / Bugfixes

  • #3213: chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
  • #3212: chore(deps): bump dset from 3.1.3 to 3.1.4 in the npm_and_yarn group across 1 directory
  • #3211: chore: add LABELS.md
  • #3201: fix: ensure connectedTerms returns terms for the specified taxonomy only
  • #3199: chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates

1.28.1

Chores / Bugfixes

  • #3189: fix: [regression] missing placeholder in $wpdb->prepare() call

1.28.0

Upgrade Notice

This release contains an internal refactor for how the Type Registry is generated which should lead to significant performance improvements for most users. While there is no known breaking changes, because this change impacts every user we highly recommend testing this release thoroughly on staging servers to ensure the changes don’t negatively impact your projects.

New Features

  • #3172: feat: only eagerlyLoadType on introspection requests.

Chores / Bugfixes

  • #3181: ci: replace docker-compose commands with docker compose
  • #3182: ci: test against WP 6.6
  • #3183: fix: improve performance of SQL query in the user loader

1.27.2

Chores / Bugfixes

  • #3167: fix: missing .svg causing admin_menu not to be registered

1.27.1

Chores / Bugfixes

  • #3066: fix: merge query arg arrays instead of overriding.
  • #3151: fix: update dev-deps and fix WPGraphQL::get_static_schema()
  • #3152: fix: handle regression when implementing interface with identical args.
  • #3153: chore(deps-dev): bump composer/composer from 2.7.6 to 2.7.7 in the composer group across 1 directory
  • #3155: chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates
  • #3160: chore: Update branding assets
  • #3162: fix: set_query_arg should not merge args

1.27.0

New Features

  • #3143: feat: Enhance tab state management with query arguments and localStorage fallback

Chores / Bugfixes

  • #3139: fix: $settings_fields param on “graphql_get_setting_section_field_value” filter not passing the correct type
  • #3137: fix: WPGraphQL Settings page fails to load when “graphiql_enabled” setting is “off”
  • #3133: build: clean up dist
  • #3146: test: add e2e test coverage for tabs in the settings page

1.26.0

New Features

  • #3125: refactor: improve query handling in AbstractConnectionResolver
    • new: graphql_connection_pre_get_query filter
    • new: AbstractConnectionResolver::is_valid_query_class()
    • new: AbstractConnectionResolver::get_query()
    • new: AbstractConnectionResolver::get_query_class()
    • new: AsbtractConnectionResolver::query_class()
    • new: AbstractConnectionResolver::$query_class
  • #3124: refactor: split AbstractConnectionResolver::get_args() and ::get_query_args() into ::prepare_*() methods
  • #3123: refactor: split AbstractConnectionResolver::get_ids() into ::prepare_ids()
  • #3121: refactor: split AbstractConnectionResolver::get_nodes() and get_edges() into prepare_*() methods
  • #3120: refactor: wrap AbstractConnectionResolver::is_valid_model() in ::get_is_valid_model()

Chores / Bugfixes

  • #3125: refactor: improve query handling in AbstractConnectionResolver
    • Implement PHPStan Generic Type
    • Update generic Exceptions to InvariantViolation
  • #3127: chore: update references to the WPGraphQL Slack Community to point to the new WPGraphQL Discord community instead.
  • #3122: chore: relocate AbstractConnectionResolver::is_valid_offset() with other abstract methods.

1.25.0

New Features

  • #3104: feat: add AbsractConnectionResolver::pre_should_execute(). Thanks @justlevine!

Chores / Bugfixes
#3104: refactor: AbstractConnectionResolver::should_execute() Thanks @justlevine!
#3112: fix: fixes a regression from v1.24.0 relating to field arguments defined on Interfaces not being properly merged onto Object Types that implement the interface. Thanks @kidunot89!
#3114: fix: node IDs not showing in the Query Analyzer / X-GraphQL-Keys when using DataLoader->load_many()
#3116: chore: Update WPGraphQLTestCase to v3. Thanks @kidunot89!

1.24.0

New Features

  • #3084: perf: refactor PluginConnectionResolver to only fetch plugins once. Thanks @justlevine!
  • #3088: refactor: improve loader handling in AbstractConnectionResolver. Thanks @justlevine!
  • #3087: feat: improve query amount handling in AbstractConnectionResolver. Thanks @justlevine!
  • #3086: refactor: add AbstractConnectionResolver::get_unfiltered_args() public getter. Thanks @justlevine!
  • #3085: refactor: add AbstractConnectionResolver::prepare_page_info()and only instantiate once. Thanks @justlevine!
  • #3083: refactor: deprecate camelCase methods in AbstractConnectionResolver for snake_case equivalents. Thanks @justlevine!

Chores / Bugfixes

  • #3095: chore: lint for superfluous whitespace. Thanks @justlevine!
  • #3100: fix: recursion issues with interfaces
  • #3082: chore: prepare ConnectionResolver classes for v2 backport

1.23.0

New Features

  • #3073: feat: expose hasPassword and password fields on Post objects. Thanks @justlevine!
  • #3091: feat: introduce actions and filters for GraphQL Admin Notices

Chores / Bugfixes

  • #3079: fix: GraphiQL IDE test failures
  • #3084: perf: refactor PluginConnectionResolver to only fetch plugins once. Thanks @justlevine!
  • #3092: ci: test against wp 6.5
  • #3093: ci: Update actions in GitHub workflows and cleanup. Thanks @justlevine!
  • #3093: chore: update Composer dev-deps and lint. Thanks @justlevine!

1.22.1

Chores / Bugfixes

  • #3067: fix: respect show avatar setting
  • #3063: fix: fixes a bug in cursor stability filters that could lead to empty order
  • #3070: test(3063): Adds test for #3063

1.22.0

New Features

  • #3044: feat: add graphql_pre_resolve_menu_item_connected_node filter
  • #3039: feat: add UniformResourceIdentifiable interface to Comment type
  • #3020: feat: introduce graphql_query_analyzer_get_headers filter

Chores / Bugfixes

  • #3062: ci: pin wp-browser to “<3.5” to allow automated tests to run properly
  • #3057: fix: admin_enqueue_scripts callback should expect a possible null value passed to it
  • #3048: fix: isPostsPage on content type
  • #3043: fix: return empty when filtering menuItems by a location with no assigned items
  • #3045: fix: UsersConnectionSearchColumnEnum values should be prefixed with user_

1.21.0

New Features

  • #3035: feat: provide better error when field references a type that does not exist
  • #3027: feat: Add register_graphql_admin_notice API and intial use to inform users of the new WPGraphQL for ACF plugin

Chores / Bugfixes

  • #3038: chore(deps-dev): bump the composer group across 1 directories with 1 update. Thanks @dependabot!
  • #3033: fix: php deprecation error for dynamic properties on AppContext class
  • #3031: fix(graphiql): Allow GraphiQL to run even if a valid schema cannot be returned. Thanks @linucks!

1.20.0

New Features

  • #3013: feat: output GRAPHQL_DEBUG message if requested amount is larger than connection limit. Thanks @justlevine!
  • #3008: perf: Expose graphql_should_analyze_queries as setting. Thanks @justlevine!

Chores / Bugfixes

  • #3022: chore: add @justlevine to list of contributors! ? ?
  • #3011: chore: update composer dev-dependencies and use php-compatibility:develop branch to 8.0+ lints. Thanks @justlevine!
  • #3010: chore: implement stricter PHPDoc types. Thanks @justlevine!
  • #3009: chore: implement stricter PHPStan config and clean up unnecessary type-guards. Thanks @justlevine!
  • #3007: fix: call html_entity_decode() with explicit flags and decode single-quotes. Thanks @justlevine!
  • #3006: fix: replace deprecated AbstractConnectionResolver::setQueryArg() call with ::set_query_arg(). Thanks @justlevine!
  • #3004: docs: Update using-data-from-custom-database-tables.md
  • #2998: docs: Update build-your-first-wpgraphql-extension.md. Thanks @Jacob-Daniel!
  • #2997: docs: update wpgraphql-concepts.md. Thanks @Jacob-Daniel!
  • #2996: fix: Field id duplicates uri field description. Thanks @marcinkrzeminski!

View Full Changelog: https://github.com/wp-graphql/wp-graphql/blob/develop/CHANGELOG.md

Try other plugins

Yoast SEO icon

Yoast SEO

4.8 · 10M+ installs

Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the Yoast SEO…