Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document structure and stats do not consistently process synced patterns (aka reusable blocks) #33079

Open
mrwweb opened this issue Jun 29, 2021 · 9 comments
Labels
[Block] Block The "Reusable Block" Block [Feature] Document Outline An option that outlines content based on a title and headings used in the post/page [Feature] Synced Patterns Related to synced patterns (formerly reusable blocks) General Interface Parts of the UI which don't fall neatly under other labels. [Type] Bug An existing feature does not function as intended

Comments

@mrwweb
Copy link

mrwweb commented Jun 29, 2021

Preface: This behaves like a regression for the fix that closed #12042 and #11744.

Description

  • Headings in reusable blocks are not reflected in the Document Outline
  • The word count and character counts do not include blocks reusable blocks
  • The total block count, paragraph count, and heading count—surprisingly—are correct
  • The issue applies to saved and unsaved reusable blocks.
  • The issue happens regardless of whether the reusable block was created on the post or added to it from an existing reusable block.

Step-by-step reproduction instructions

  1. Make a new page
  2. Put some content on the page including multiple paragraphs and headings
  3. Note the Document Outline
  4. Turn at least one heading and paragraph of that content into a reusable block
  5. Note the change to the Document Outline

Expected behaviour

Document Outline reflects entire page content regardless of whether it includes a reusable block.

Actual behaviour

Document outline, word count, and character count exclude content in reusable blocks

Screenshots

Page content with four headings
List view of page showing two headings on page and two headings in a reusable block
Document Outline showing incorrect word, character, and outline. Showing correct heading and block count

WordPress information

  • WordPress version: 5.7.2
  • Gutenberg version: Not installed
  • Are all plugins except Gutenberg deactivated? No plugins at all
  • Are you using a default theme (e.g. Twenty Twenty-One)? Twenty Twenty

Device information

  • Device: Desktop
  • Operating system: Windows 10
  • Browser: Firefox 90.0b12
@talldan talldan added [Block] Block The "Reusable Block" Block [Feature] Synced Patterns Related to synced patterns (formerly reusable blocks) [Type] Bug An existing feature does not function as intended General Interface Parts of the UI which don't fall neatly under other labels. labels Jun 30, 2021
@kathrynwp kathrynwp added [Priority] Low Used to indicate that the issue at hand isn't a top priority to address and can be handled later [Feature] Document Outline An option that outlines content based on a title and headings used in the post/page labels Aug 18, 2022
@kathrynwp
Copy link

I can still replicate this with:

WordPress 6.0.1
No plugins active

Initial Document Outline

Add_New_Page_‹Self-hosted_Test—_WordPress

Outline After One Heading & One Paragraph made into a Reusable Block

Add_New_Page_‹Self-hosted_Test—_WordPress

@cbirdsong
Copy link

I can confirm this is still an issue in Wordpress 6.3.

@jordesign
Copy link
Contributor

Confirming this is still true testing WP6.4 RC2 as well - headings and text within Synced patterns are not registered in the outline.

@afercia afercia removed the [Priority] Low Used to indicate that the issue at hand isn't a top priority to address and can be handled later label Feb 20, 2024
@afercia
Copy link
Contributor

afercia commented Feb 20, 2024

This was also reported in #51909, for the sunced patterns.

The word and characters count is still incorrect on current trunk version 17.7.0. See screenshot below.

Removing the Low priority label as I think this should be fixed soon. Introducing features that break other existing features and keeping showing users very evident wrong inforation in the user interface is less than ideal. I'm not sure providing users with broken functionality helps with increasing trust with the editor.

Screenshot 2024-02-20 at 09 22 36

@afercia
Copy link
Contributor

afercia commented Feb 20, 2024

After some quick testing, seems that on current trunk headings within synced patterns are now correctly parsed and added in the document outline. See animated GIF below, where after page refresh the synced pattern is fetched and when loaded the additional heading within the pattern is added to the document outline.

Some more extended testing would be welcome.

synced pattern outline

@mrwweb mrwweb changed the title Document structure does not consistently process reusable blocks Document structure and stats do not consistently process synced patterns (aka reusable blocks) Feb 20, 2024
@afercia
Copy link
Contributor

afercia commented Jun 19, 2024

Update: testing on latest trunk 18.6.0-rc.1 this appears to still (again?) be a problem. Headings within Synced Patterens aren't included in the document outline. Which makes this feature visibly not fully functional and it's in this state since a while. I would appreciate this issue to get some more priority as it's a buggy functionality visible to all users.

In the GIF below:

  • Keep the Document Overview > Outline panel open.
  • Add a couple headings and a paragraph.
  • Select the last heading and paragraph.
  • Make them a Synced pattern.
  • Observe the last heading disappears from the document outline.

headings within patterns

@mrwweb
Copy link
Author

mrwweb commented Jun 19, 2024

Which makes this feature visibly not fully functional

💯 This feels like a serious bug and one that hasn't been addressed for years now. It should ideally be addressed holistically to resolve both this issue and #5037 at the same time.

It seems like the Document Outline needs to reflect the actual post content so the heading outline includes synced patterns as well as headings in custom blocks. Without that, the heading outline is frequently wrong, potentially providing an accessibility false positive in the outline.

@afercia
Copy link
Contributor

afercia commented Jun 20, 2024

It seems like the Document Outline needs to reflect the actual post content so the heading outline includes synced patterns as well as headings in custom blocks.

I'd totally agree this feature needs to be rethinked. I'm not sure it can be based on the block type. To provide a fully correct outline, this feature needs to be aware of all the headings that are actually rendered, even if they come from, for example, shortcodes (besids patterns, custom blocks, stc.).

@afercia
Copy link
Contributor

afercia commented Nov 12, 2024

Looking back into this issue after conversation with @artemiomorales at Roma Core Days 2024. I can still reproduce this problem and it's even a broader issue now as the document outline doesn't sync after other updates of the content for example when binding a heading content to a source.

Maybe the only way to reliably solve the overall issue would be soething like an action components can subscribe to that signals 'content has been updated'. When the editor signals a content update, other components, also the ones provided by plugins, may do their things.

A few cases that can be reproduced on current trunk:

1
Synced patterns

  • Make a synced pattern with a group that contains a heading and a paragraph.
  • Create a post with some headings and paragraphs.
  • Open the Document Outline and observe it correctly shows the headings hierarchy.
  • Add the patterh to the post.
  • Observe the Document Outline doesn't update and does not show the heading contained in the pattern.

Screenshot:

Image

To my understanding, a synced pattern in the post markup is only a reference e.g. <!-- wp:block {"ref":14285} /--> so there's actually no content in the post content that the editor itself or plugins can fetch. This appears to be an architectural problem because there are many cases where the editor itself or plugins would need to get the actual content.

2
Bound headings (and more in general any bound block) via the Bindings API.

  • Select one of the headings in your post.
  • Observe the Document Outline shows the heading and its content.
  • Bind the heading content to a post meta you previously registered. The post meta should provide a text string.
  • Observe the content of the heading updates in the editor canvas.
  • Observe the content of the heading does not update in the Document Outline.
  • Override the default value provided by post meta by editing the bound heading content.
  • Observe the Document Outline does not update the content of the heading.

Screenshot:

Image

To my understanding, the post content still contains the original content so that the editor itself and plugins may not be aware the actual rendered content has updated. In the example below, the block markup still has the original heading content First heading while the actual rendered content comes from the bound post meta.

<!-- wp:heading {"metadata":{"bindings":{"content":{"source":"core/post-meta","args":{"key":"text_short"}}}}} -->
<h2 class="wp-block-heading">First heading</h2>
<!-- /wp:heading -->

This appears to be a broader issue and applies to other block attributes as well e.g. the alt text of an image, the content of buttons and any other block attribute value the editor itself or plugins may want to use in other components.

3
Plugins that need to get the actually rendered content after any update to run their things, e.g. Yoast SEO or other plugins.
Cc @enricobattocchi

Considering the two cases above and other potential cases in the future, the post content may not contain the actual content any longer. It may only contain references to other posts or references to sources.

However, some functionalities of the editor itseld and plugisn may need to fetch the actual content, and may need to fetch it 'live' after any update.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Block The "Reusable Block" Block [Feature] Document Outline An option that outlines content based on a title and headings used in the post/page [Feature] Synced Patterns Related to synced patterns (formerly reusable blocks) General Interface Parts of the UI which don't fall neatly under other labels. [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

No branches or pull requests

6 participants