Releases: wpengine/wp-graphql-content-blocks
v4.8.2
v4.8.1
v4.8.0
Minor Changes
-
742f18a: # Querying Object-Type Block Attributes in WPGraphQL
Overview
With this update, you can now query object-type block attributes with each property individually, provided that the typed structure is defined in the class
typed_object_attributes
property or through a WordPress filter.How It Works
The
typed_object_attributes
is a filterable array that defines the expected typed structure for object-type block attributes.- The keys in
typed_object_attributes
correspond to object attribute names in the block. - Each value is an associative array, where:
- The key represents the property name inside the object.
- The value defines the WPGraphQL type (e.g.,
string
,integer
,object
, etc.).
- If a block attribute has a specified typed structure, only the properties listed within it will be processed.
Defining Typed Object Attributes
Typed object attributes can be defined in two ways:
1. In a Child Class (
typed_object_attributes
property)Developers can extend the
Block
class and specify typed properties directly:class CustomMovieBlock extends Block { /** * {@inheritDoc} * * @var array<string, array<string, "array"|"boolean"|"number"|"integer"|"object"|"rich-text"|"string">> */ protected array $typed_object_attributes = [ 'film' => [ 'id' => 'integer', 'title' => 'string', 'director' => 'string', 'soundtrack' => 'object', ], 'soundtrack' => [ 'title' => 'string', 'artist' => 'string' ], ]; }
2. Via WordPress Filter
You can also define typed structures dynamically using a WordPress filter.
add_filter( 'wpgraphql_content_blocks_object_typing_my-custom-plugin_movie-block', function () { return [ 'film' => [ 'id' => 'integer', 'title' => 'string', 'director' => 'string', 'soundtrack' => 'object', ], 'soundtrack' => [ 'title' => 'string', 'artist' => 'string' ], ]; } );
Filter Naming Convention
To apply custom typing via a filter, use the following format:
wpgraphql_content_blocks_object_typing_{block-name}
- Replace
/
in the block name with-
. - Example:
- Block name:
my-custom-plugin/movie-block
- Filter name:
wpgraphql_content_blocks_object_typing_my-custom-plugin_movie-block
- Block name:
Example:
Example
block.json
DefinitionIf the block has attributes defined as objects, like this:
"attributes": { "film": { "type": "object", "default": { "id": 1, "title": "The Matrix", "director": "Director Name" } }, "soundtrack": { "type": "object", "default": { "title": "The Matrix Revolutions...", "artist": "Artist Name" } } }
This means:
- The
film
attribute containsid
,title
,director
. - The
soundtrack
attribute containstitle
andartist
.
WPGraphQL Query Example
Once the typed object attributes are defined, you can query them individually in WPGraphQL.
fragment Movie on MyCustomPluginMovieBlock { attributes { film { id title director soundtrack { title } } soundtrack { title artist } } } query GetAllPostsWhichSupportBlockEditor { posts { edges { node { editorBlocks { __typename name ...Movie } } } } }
- The keys in
v4.7.0
Minor Changes
-
82c6080: Adds support for resolving and returning related term items as a
terms
connection for the CorePostTerms block along withtaxonomy
connection.
Adds support for resolving and returning theprefix
andsuffix
items within the correspondent fields of the CorePostTerms block.query TestPostTerms($uri: String! = "test-terms") { nodeByUri(uri: $uri) { id uri ... on NodeWithPostEditorBlocks { editorBlocks { __typename ... on CorePostTerms { prefix suffix taxonomy { __typename node { __typename id name } } terms { __typename nodes { __typename id name } } } } } } }
v4.6.0
Minor Changes
- 7838c93: Replaced old plugin service to use the WPE updater service for checking for updates. The new API endpoint will be https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/info.json
v4.5.0
Minor Changes
-
b133a1b: Added WP GraphQL as a required plugin.
-
b813352: Adds support for resolving and returning navigation items within the CoreNavigation innerBlocks for WPGraphQL Content Blocks.
{ posts { nodes { editorBlocks { ... on CoreNavigation { type name innerBlocks { type name } attributes { ref } } } } } }
{ "data": { "posts": { "nodes": [ { "editorBlocks": [ { "type": "CoreNavigation", "name": "core/navigation", "innerBlocks": [ { "type": "CorePageList", "name": "core/page-list" }, { "type": "CoreNavigationLink", "name": "core/navigation-link" } ], "attributes": { "ref": 31 } } ] }, { "editorBlocks": [{}] } ] } } }
Patch Changes
- dec27c3: feat: Added a
CoreGroup
block class to fix an issue with a missing attributecssClassName
v4.4.0
v4.3.2
v4.3.1
v4.3.0
Minor Changes
- d123b81: dev: Refactor attribute resolution into
Data\BlockAttributeResolver
- d123b81: feat: add support for parsing (deprecated)
meta
attributes.
Patch Changes
- 96bad40: tests: fix
setUp()
/tearDown()
methods to prevent PHPUnit lifecycle issues. - f898d61: tests : Add tests for
CoreList
andCoreListItem
blocks. - 3b32f06: tests : Backfill tests for Core Image block.
- 7301ed9: tests: Add tests for CoreHeading block
- d4d7374: tests : Backfill tests for Core Video block.
- 3a1157b: fix: Correctly parse nested attribute and tag sources.
- 8b2e168: tests : Add tests for
CoreSeparator
block. - 962081d: tests: Add tests for CoreParagraph block
- 5915c06: tests: Add tests for CorePreformatted Block
- 3a1157b: tests: backfill tests for
CoreTable
attributes. - a02e75a: tests: Add tests for CoreCode Block
- c6bdab0: tests : Add tests for
CoreQuote
block. - a38e479: tests : backfill tests for ContentBlockResolver