Skip to content

Commit

Permalink
Added block and content resolver for CoreFootnotes
Browse files Browse the repository at this point in the history
Added content block resolver for getting post meta for footnotes.
  • Loading branch information
colinmurphy committed Jan 20, 2025
1 parent b133a1b commit 6ae09aa
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 0 deletions.
45 changes: 45 additions & 0 deletions .changeset/eighty-cameras-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
"@wpengine/wp-graphql-content-blocks": patch
---

Added content resolver for CoreFootnotes when the post_meta isn't loaded


```gql
fragment CoreFootnotesBlockFragment on CoreFootnotes {
innerBlocks {
renderedHtml
}
}

query Post($id: ID!) {
post(id: $id, idType: DATABASE_ID) {
databaseId
editorBlocks {
...CoreFootnotesBlockFragment
}
}
}
```


```json
{
"data": {
"post": {
"databaseId": 16,
"editorBlocks": [
{},
{
"innerBlocks": [
{
"renderedHtml": "<ol class=\"footnotes\"><li id=\"d4051e5e-1547-49ff-ab6d-bec1caa6aabc\"><a href=\"https://wpengine.com/about-us/\">https://wpengine.com/about-us/</a></li><li id=\"2e79de23-68a8-42eb-87ab-1f2467a21752\"><a href=\"https://wpengine.com/support/\">https://wpengine.com/support/</a></li></ol>"
}
]
},
{}
]
}
}
}
```
27 changes: 27 additions & 0 deletions includes/Blocks/CoreFootnotes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php
/**
* Core Paragraph Block
*
* @package WPGraphQL\ContentBlocks\Blocks
*/

namespace WPGraphQL\ContentBlocks\Blocks;

/**
* Class CoreParagraph
*/
class CoreFootnotes extends Block {
/**
* {@inheritDoc}
*
* @var array|null
*/
protected ?array $additional_block_attributes = [
'cssClassName' => [
'type' => 'string',
'selector' => 'p',
'source' => 'attribute',
'attribute' => 'class',
],
];
}
52 changes: 52 additions & 0 deletions includes/Data/ContentBlocksResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ private static function handle_do_block( array $block ): ?array {
$block = self::populate_post_content_inner_blocks( $block );
$block = self::populate_reusable_blocks( $block );
$block = self::populate_pattern_inner_blocks( $block );
$block = self::populate_core_footnotes_inner_blocks( $block );

// Prepare innerBlocks.
if ( ! empty( $block['innerBlocks'] ) ) {
Expand Down Expand Up @@ -292,6 +293,56 @@ private static function populate_pattern_inner_blocks( array $block ): array {
}

$block['innerBlocks'] = $resolved_patterns;

return $block;
}

/**
* Populates the innerBlocks for core/footnotes
*
* @param array<string,mixed> $block The block to populate.
*
* @return array<string,mixed> The populated block.
*/
private static function populate_core_footnotes_inner_blocks( array $block ): array {

if ( 'core/footnotes' !== $block['blockName'] ) {
return $block;
}

$post = get_post();
if ( ! is_object( $post ) || ! is_a( $post, \WP_Post::class ) ) {
return $block;
}

$post_meta = get_post_meta( $post->ID, 'footnotes', true );
if ( ! $post_meta ) {
return $block;
}

$content = json_decode( $post_meta, true );
if ( empty( $content ) ) {
return $block;
}

$html = '';
/** @var array{id: string, content: string} $footnote */
foreach ( $content as $footnote ) {
$id = $footnote['id'] ?? null;
$content = $footnote['content'] ?? null;
if ( ! $content ) {
continue;
}

$html .= "<li id=\"{$id}\">{$content}</li>";
}

$parsed_blocks = parse_blocks( "<ol class=\"footnotes\">{$html}</ol>" );

if ( empty( $parsed_blocks ) ) {
return $block;
}
$block['innerBlocks'] = $parsed_blocks;
return $block;
}

Expand All @@ -307,6 +358,7 @@ private static function flatten_block_list( $blocks ): array {
foreach ( $blocks as $block ) {
$result = array_merge( $result, self::flatten_inner_blocks( $block ) );
}

return $result;
}

Expand Down

0 comments on commit 6ae09aa

Please sign in to comment.