A curated list of resources about WordPress as a headless CMS with
Gatsby as a Static Site Generator (SSG).
A headless CMS is a back-end only content management
system (CMS). Its purpose is to serve content and make it accessible via
an API (e.g. REST or GraphQL).
A Static Site Generator (SSG) is a framework or setup,
that helps you to generate static websites (HTML/CSS/JS). The source of
your data can be anything from local files (e.g. text files or markdown)
to APIs (e.g. REST, GraphQL).
Why Gatsby and WordPress?
WordPress is one of the most used CMS in the world and
therefore many people already know how to work with it. The typical
front-end approach with PHP-based templates is getting more and more
problematic in an environment where performance is key. The approach to
use WordPress as a headless CMS with normal API calls through JavaScript
already exists, but also has the downside of having to make requests to
the server and rendering depending on the response. This adds time to
load.
Gatsby instead, pre-renders the whole site at compile time
and therefore the user gets a
fully prepared static site on their first request, making
it one of the best approaches for performance. Another
huge benefit is security, as your WordPress instance can
be anywhere, even locally and you don’t need to expose any of it to the
user.
The static Gatsby site therefore, is not hackable. Find
further arguments for pros and cons in the resources below.
Contents
Communities
If you need help with anything, there are some highly active communities.
WPGraphQL -
Slack Chat -
Spectrum Chat -
Twitter
Gatsby -
Discord Chat -
Reddit -
Stack Overflow
Articles and Talks
List of articles and talks that elaborate on the technology stack in
general.
Plugins
List of useful plugins to make WordPress and Gatsby work together. Ordered
alphabetically.
WordPress
Essential Plugins
-
WPGraphQL -
Documentation - WPGraphQL
brings the power of GraphQL to your WordPress site.
-
WPGatsby - This
plugin configures your WordPress site to be an optimized source for
Gatsby.
WPGraphQL Extensions
-
WPGraphQL Cors
- This FREE plugin from
@kidunot89 and
@byfunkhaus claims
to enable authentication with WPGraphQL to “just work” by allowing you
to set CORS headers that GraphQL will accept, which means WordPress
default auth cookies can be accepted.
-
Total Counts for WPGraphQL
- This FREE plugin from
@builtbycactus
exposes total counts to connections in the WPGraphQL Schema.
-
WPGraphQL Gutenberg
- Exposes Gutenberg blocks to the WPGraphQL API.
-
WPGraphQL JWT Authentication
- Extends the WPGraphQL plugin to provide authentication using JWT (JSON
Web Tokens).
-
WPGraphQL Lock
- Enables query locking for WPGraphQL by implementing persisted GraphQL
queries.
-
WPGraphQL Meta
- This FREE plugin from
@robertorourke
exposes meta registered via the WordPress register_meta API to
WPGraphQL.
-
WPGraphQL Meta Query
- Adds Meta_Query support to the WPGraphQL Plugin for postObject query
args.
-
WPGraphQL Persisted Queries
- This FREE plugin from
@qz adds the ability to
use Persisted Queries with WPGraphQL.
-
WPGraphQL Offset Pagination
- This FREE plugin from
@enshrined adds
basic offset pagination as opposed to the standard Cursor based
pagination that ships with WPGraphQL.
-
WPGraphQL Send Email
- This FREE plugin from
@Ash_Hitchcock
allows you to send emails via a simple mutation. Includes the abilitty
to restrict sending to trusted origins.
Extensions for that use other plugins with WPGraphQL
-
QL Search - An
extension that integrates SearchWP into WPGraphQL.
-
WPGraphQL Content Blocks
- This FREE plugin from the folks at QZ.com exposes a way to query HTML
content from WordPress Posts and Pages as “Blocks” (not related to
Gutenberg) to bring more structure to your queried content.
-
WPGraphQL Enable All Post Types (DalkMania)
- This FREE plugin from
@DalkMania
automatically adds ALL registered post types to the WPGraphQL Schema.
-
WPGraphQL Enable All Post Types (TylerBarnes)
- This FREE plugin from
@tylbar automatically
adds ALL registered post types to the WPGraphQL Schema.
-
WPGraphQL Google Schema
- This FREE plugin from
@izzygld261 adds
Google Schema support to WPGraphQL.
-
WPGraphQL Gutenberg ACF
- Exposes ACF blocks through GraphQL
-
WPGraphQL MB (MetaBox)
- This FREE plugin from
@DalkMania adds all
registered metaboxes using
metabox.io to the WPGraphQL Schema.
-
WPGraphQL MetaBox Relationships
- This FREE plugin from
@hsimah adds support
for the metabox.io Relationships field
to WPGraphQL (when also using his wp-graphql-metabox plugin).
-
WPGraphQL Polls
- This FREE plugin from
@andrenosouza
allows you to interact with data from the WP-Polls plugin via GraphQL
Queries and Mutations.
-
WPGraphQL Polylang Extension
- Extends WPGraphQL schema with language data from the Polylang plugin.
-
WPGraphQL Tax Query
- Adds Tax_Query support to the WPGraphQL Plugin for postObject query
args (WP_Query).
-
WPGraphQL WPML
- This FREE plugin from
@rburgst extends the
WPGraphQL schema with language data from the WPML plugin. In addition it
turns off WPML default filters in order to be able to iterate over all
posts regardless of language.
-
WPGraphQL for Advanced Custom Fields
- Exposes Advanced Custom Fields to the WPGraphQL Schema.
-
WPGraphQL for BuddyPress
- This FREE plugin from
@RenatoNascAlves
exposes BuddyPress data to WPGraphQL.
-
WPGraphQL for Carbon Fields
- This FREE plugin from
@matepaiva exposes
fields registered using Carbon Fields to the WPGraphQL Schema.
-
WPGraphQL for Custom Post Type UI
- This FREE plugin adds settings to Custom Post Type UI allowing you to
set which Post Types and Taxonomies registered by CPTUI should display
in the WPGraphQL Schema.
-
WPGraphQL for FacetWP
- This FREE plugin from
@hsimah exposes
filters on WPGraphQL queries to allow for faceted search with FacetWP.
-
WPGraphQL for Gravity Forms
- This FREE plugin from
@KellenMace of
@harness_up
exposes
@gravityforms
data to WPGraphQL, allowing you to query for forms, fields, entries, and
more.
-
WPGraphQL for Metabox
- This FREE plugin from
@hsimah exposes fields
registered using the popular http://MetaBox.io to the WPGraphQL Schema.
-
WPGraphQL for Ninja Forms
- This free plugin exposes forms created by the Ninja Forms plugin to
the WPGraphQL Schema and allows for the forms to be submitted via
GraphQL Mutations.
-
WPGraphQL for Posts 2 Posts
- This FREE plugin from
@KellenMace of
@harness_up
automatically creates GraphQL connections for all of your Posts 2 Posts
connections.
-
WPGraphQL for SEOPress
- This FREE plugin from
@moon_meister
exposes data managed by SEOPress to the WPGraphQL Schema, allowing for
SEO data to be used in your headless applications.
-
WPGraphQL for WooCommerce
- This FREE plugin exposes WooCommerce data to WPGraphQL allowing you to
interact with your store’s data via GraphQL Queries and mutations.
-
WPGraphQl Yoast SEO Plugin
- Exposes Yoast SEO data to the WPGraphQL Plugin.
Other helpful Plugins
-
Advanced Custom Fields
- ACF PRO
-
Headless Mode
- Headless mode sets up a redirect for all users trying to access the
site. The only requests that are granted admission are ones that are
either trying to access the REST API, the WP GraphQL API, or any
logged-in user looking to access the headless install to edit or create
posts.
- Polylang
-
WP JAMstack Deployments
- WordPress plugin for JAMstack deployments on Netlify (and other
platforms).
Gatsby Plugins
Free Tutorials / Courses
Note: Since the release of gatsby-source-wordpress V4, it
is the preferred over gatsby-source-graphql and therefore I will only list
tutorials related to that approach.
Written Tutorials
Video Tutorials
-
2019.11:
25+ Videos - Gatsby + WordPress (2019) Complete Course
- The series focuses on how we can use WordPress as a headless CMS with
a GraphQL schema to interface with. After setting up our WordPress site
and theme, we’ll move onto Gatsby and how we can use our new schema to
generate content for our Gatsby site, programmatically generating pages,
converting Gutenberg blocks to React components and finishing off the
chapter with a focus on SEO in Gatsby.
-
2019.07:
Gatsby + WordPress with WPGraphQL (with Jason Bahl) — Learn With
Jason
- In this stream, Jason Bahl teaches how to use WordPress with Advanced
Custom Fields and WPGraphQL to create an powerful, flexible admin
dashboard, then query and display that data in a Gatsby site.
-
2019.07:
Crash Course: Headless WordPress with WPGraphQL, ACF, and React
- In this video, Alex Young (WPCasts) goes over how to get a simple
headless WordPress setup with WPGraphQL and React.
-
2019.06:
Using WordPress with WPGraphQL
- In this video you will learn how to use GraphQL with WordPress using
an awesome plugin named WPGraphQL and some extra cool stuff like GraphQL
+ Advanced Custom Fields.
-
2019.04:
WPGraphQL for ACF
- Jason Bahl shows how to use WPGraphQL for Advanced Custom Fields.
-
2018.07:
GraphQL with WordPress and Gutenberg - Jason Bahl - 2018 JavaScript
for WordPress Conference
- In this talk from the 2018 JavaScript for WordPress Conference, the
Developer of the WP GraphQL Plugin, Jason Bahl, gives updated examples
of how you can use GraphQL with WordPress and Gutenberg.
Paid Tutorials / Courses
List of paid courses.
-
2021.01:
Building a Headless WordPress Site with Gatsby
- This course is a step-by-step walk through using
gatsby-source-wordpress plugin to create a fully functional headless
Gatsby WordPress site with posts, pages, categories, tags, post
navigation and other features.
Starters
List of project starters, that you can clone and start building upon.
Themes
List of gatsby-themes that work with WordPress as a source, which you can
use in your Gatsby setup.
-
Twenty Nineteen Gatsby Theme
- A port of the Twenty Nineteen WordPress Theme over to Gatsby.
-
Gatsby WordPress Publisher Theme
- The Gatsby Publisher Theme allows you to create a headless (or
decoupled) WordPress site. This theme will display all of your pages and
posts in a static front-end built on React and Gatsby.
Contribute
Contributions welcome! Read the
contribution guidelines first.
License
To the extent possible under law, Henrik Wirth has waived all copyright
and related or neighboring rights to this work.