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

Add an 'area' term for Template Parts. #28410

Merged
merged 36 commits into from
Feb 11, 2021

Conversation

Addison-Stavlo
Copy link
Contributor

@Addison-Stavlo Addison-Stavlo commented Jan 22, 2021

Description

This PR explores adding an 'area' (im open to better naming suggestions) term to aid in being able to classify and request all template parts corresponding to a specific type ('header', 'footer', etc.) - something like this will be necessary to enable items discussed in #27337

Current state of this PR:

  • Registers the new tax term as wp_template_part_area.
  • Allows themes to set the default value for this term in the 'experimental-theme.json' file. The current schema used to determine this value is of the format templateParts[ $slug ][ 'area' ]. For example, to define the 'area' of a template part whose file is named "file-name.html" the json would look like:
"templateParts": {
		"file-name": {
			"area": "header"
		}
	}
  • Adds this term to the response for file based and custom template parts.
  • Updates the rest controller to save this term in standard CRUD operations.
  • Enables querying by this term.
  • Restricts this term to a list of supported types.

How has this been tested?

Many of the following steps are covered in the added php unit tests. To test manually:

  • Run this PR

1 - Verify the term is added on singular requests and persists across saving.

  • Add this json code to the experimental-themes.json file of a block based theme:
"templateParts": {
		"header": {
			"area": "header"
		}
	}
  • Load the editor with a 'fresh' theme install (no customized theme templates or template parts).
  • Log the response for the single template part request (such as entityRecord here) and verify the header's "area" key is present and has the expected value "header".
  • Similarly, verify the footer (which you did not add any json for) is listed as "uncategorized".
  • Make changes to the template part and save.
  • Log the response again for the now custom template part (is_custom should now be true), and verify the term key/value is still present as expected.

2 - Verify querying by the term works for both non-custom and custom template parts.

  • Clean/delete the customized theme template parts from the testing step above.
  • The theme's JSON file will still need the addition mentioned above.
  • Request template parts querying area: "header" and log the result. One way to do this is to add a query to this request and log the result. This request can be triggered by pressing the "down" chevron in a template part block's toolbar (to the right of the renaming input).
	select( 'core' ).getEntityRecords( 'postType', 'wp_template_part', {
		area: 'header',
	} ) 
  • Load the editor, trigger and log the request and verify only the header template part is returned in result.
  • Edit the header template part and save.
  • Again, trigger and log the response for the now custom template part (is_custom should now be true) and verify it is the only result.

3 - Verify this does not work for unsupported types.

  • In the theme's JSON file, change the area from type header to type foobar.
  • Clean/delete custom theme template parts.
  • Verify this unsupported area type is not added to the template part and shows up as uncategorized.

4 - Smoke test the normal template part flows.

  • Undo any changes to Gutenberg made in the testing steps above (queries/logs).
  • Verify the nav sidebar and template part selection show both header and footer as expected.
  • Verify template part flows work as expected.

Screenshots

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@Addison-Stavlo Addison-Stavlo changed the title WIP - Add a 'template_part_type' tax term. WIP - Add a 'template_part_type' term. Jan 22, 2021
@github-actions
Copy link

github-actions bot commented Jan 22, 2021

Size Change: -190 B (0%)

Total Size: 1.37 MB

Filename Size Change
build/block-editor/index.js 124 kB +77 B (0%)
build/block-editor/style-rtl.css 12.1 kB +10 B (0%)
build/block-editor/style.css 12.1 kB +10 B (0%)
build/block-library/blocks/navigation-link/editor-rtl.css 395 B +3 B (+1%)
build/block-library/blocks/navigation-link/editor.css 397 B +3 B (+1%)
build/block-library/blocks/navigation/style-rtl.css 195 B +8 B (+4%)
build/block-library/blocks/navigation/style.css 195 B +8 B (+4%)
build/block-library/blocks/template-part/editor-rtl.css 557 B -123 B (-18%) 👏
build/block-library/blocks/template-part/editor.css 556 B -123 B (-18%) 👏
build/block-library/editor-rtl.css 9.04 kB -71 B (-1%)
build/block-library/editor.css 9.02 kB -74 B (-1%)
build/block-library/index.js 144 kB -4 B (0%)
build/block-library/style-rtl.css 8.8 kB +11 B (0%)
build/block-library/style.css 8.8 kB +11 B (0%)
build/components/index.js 270 kB +10 B (0%)
build/edit-site/index.js 24.8 kB +54 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.77 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 9.1 kB 0 B
build/block-directory/style-rtl.css 1.01 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 103 B 0 B
build/block-library/blocks/audio/style.css 103 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 465 B 0 B
build/block-library/blocks/button/style.css 464 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 233 B 0 B
build/block-library/blocks/buttons/editor.css 233 B 0 B
build/block-library/blocks/buttons/style-rtl.css 303 B 0 B
build/block-library/blocks/buttons/style.css 303 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 421 B 0 B
build/block-library/blocks/columns/style.css 421 B 0 B
build/block-library/blocks/cover/editor-rtl.css 390 B 0 B
build/block-library/blocks/cover/editor.css 389 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.25 kB 0 B
build/block-library/blocks/cover/style.css 1.25 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 396 B 0 B
build/block-library/blocks/embed/style.css 395 B 0 B
build/block-library/blocks/file/editor-rtl.css 199 B 0 B
build/block-library/blocks/file/editor.css 198 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 679 B 0 B
build/block-library/blocks/gallery/editor.css 679 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.07 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/group/editor-rtl.css 318 B 0 B
build/block-library/blocks/group/editor.css 317 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 477 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 159 B 0 B
build/block-library/blocks/latest-comments/editor.css 158 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 269 B 0 B
build/block-library/blocks/latest-comments/style.css 269 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/list/editor-rtl.css 65 B 0 B
build/block-library/blocks/list/editor.css 65 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 704 B 0 B
build/block-library/blocks/navigation-link/style.css 702 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.33 kB 0 B
build/block-library/blocks/navigation/editor.css 1.33 kB 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 214 B 0 B
build/block-library/blocks/page-list/editor.css 214 B 0 B
build/block-library/blocks/page-list/style-rtl.css 527 B 0 B
build/block-library/blocks/page-list/style.css 526 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 109 B 0 B
build/block-library/blocks/paragraph/editor.css 109 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 273 B 0 B
build/block-library/blocks/paragraph/style.css 273 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 63 B 0 B
build/block-library/blocks/preformatted/style.css 63 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 316 B 0 B
build/block-library/blocks/pullquote/style.css 316 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 90 B 0 B
build/block-library/blocks/query-loop/editor.css 89 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query/editor-rtl.css 159 B 0 B
build/block-library/blocks/query/editor.css 160 B 0 B
build/block-library/blocks/quote/editor-rtl.css 61 B 0 B
build/block-library/blocks/quote/editor.css 61 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 236 B 0 B
build/block-library/blocks/separator/style.css 236 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 504 B 0 B
build/block-library/blocks/shortcode/editor.css 504 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 117 B 0 B
build/block-library/blocks/site-logo/style.css 117 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 696 B 0 B
build/block-library/blocks/social-links/editor.css 696 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB 0 B
build/block-library/blocks/social-links/style.css 1.37 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 302 B 0 B
build/block-library/blocks/spacer/editor.css 302 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 99 B 0 B
build/block-library/blocks/subhead/editor.css 99 B 0 B
build/block-library/blocks/subhead/style-rtl.css 80 B 0 B
build/block-library/blocks/subhead/style.css 80 B 0 B
build/block-library/blocks/table/editor-rtl.css 489 B 0 B
build/block-library/blocks/table/editor.css 489 B 0 B
build/block-library/blocks/table/style-rtl.css 386 B 0 B
build/block-library/blocks/table/style.css 386 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/editor-rtl.css 62 B 0 B
build/block-library/blocks/verse/editor.css 62 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 193 B 0 B
build/block-library/blocks/video/style.css 193 B 0 B
build/block-library/common-rtl.css 1.01 kB 0 B
build/block-library/common.css 1.01 kB 0 B
build/block-library/theme-rtl.css 748 B 0 B
build/block-library/theme.css 748 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.2 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/compose/index.js 11 kB 0 B
build/core-data/index.js 16.8 kB 0 B
build/customize-widgets/index.js 4.08 kB 0 B
build/customize-widgets/style-rtl.css 168 B 0 B
build/customize-widgets/style.css 168 B 0 B
build/data-controls/index.js 827 B 0 B
build/data/index.js 8.86 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 570 B 0 B
build/dom/index.js 4.93 kB 0 B
build/edit-navigation/index.js 10.5 kB 0 B
build/edit-navigation/style-rtl.css 1.11 kB 0 B
build/edit-navigation/style.css 1.11 kB 0 B
build/edit-post/index.js 307 kB 0 B
build/edit-post/style-rtl.css 6.79 kB 0 B
build/edit-post/style.css 6.78 kB 0 B
build/edit-site/style-rtl.css 4.04 kB 0 B
build/edit-site/style.css 4.04 kB 0 B
build/edit-widgets/index.js 20 kB 0 B
build/edit-widgets/style-rtl.css 3.2 kB 0 B
build/edit-widgets/style.css 3.2 kB 0 B
build/editor/editor-styles-rtl.css 543 B 0 B
build/editor/editor-styles.css 545 B 0 B
build/editor/index.js 41.8 kB 0 B
build/editor/style-rtl.css 3.89 kB 0 B
build/editor/style.css 3.89 kB 0 B
build/element/index.js 4.61 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.76 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 4.01 kB 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/keyboard-shortcuts/index.js 2.53 kB 0 B
build/keycodes/index.js 1.93 kB 0 B
build/list-reusable-blocks/index.js 3.15 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.35 kB 0 B
build/notices/index.js 1.85 kB 0 B
build/nux/index.js 3.41 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 2.92 kB 0 B
build/rich-text/index.js 13.4 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.01 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is a great start, it matches very closely what I had in mind for this feature.

@Addison-Stavlo Addison-Stavlo changed the title WIP - Add a 'template_part_type' term. WIP - Add a 'section' term for Template Parts. Jan 22, 2021
@Addison-Stavlo Addison-Stavlo changed the title WIP - Add a 'section' term for Template Parts. Add a 'section' term for Template Parts. Jan 23, 2021
@Addison-Stavlo Addison-Stavlo marked this pull request as ready for review January 23, 2021 00:54
@Addison-Stavlo Addison-Stavlo removed the [Status] In Progress Tracking issues with work in progress label Jan 23, 2021
@jeyip
Copy link
Contributor

jeyip commented Jan 26, 2021

Testing

Behavior

Followed the instructions and everything is working as expected. I'll spend more time smoke testing the normal template part flows tomorrow.

  • Verify the term is added on singular requests and persists across saving.
  • Verify querying by the term works for both non-custom and custom template parts.
  • Verify this does not work for unsupported types.
  • Smoke test the normal template part flows.

Browsers

Smoke tested the normal template flows in other browsers

  • Chrome
  • Firefox
  • Edge
  • Safari
  • IE11

Did not test IE11 because of an existing issue

In testing I identified a bug unrelated to this PR that already exist on master. I'll leave notes here and make an issue so other testers don't need to rehash any investigation.

Copy link
Contributor

@jeyip jeyip left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything looks reasonable 👍 . The new template part section taxonomy appears to behave as expected.

+1 from me whenever we add php unit specs to the PR

Copy link
Member

@david-szabo97 david-szabo97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good and works as expected! Great work there! Looking forward to the tests 😄

lib/full-site-editing/block-templates.php Outdated Show resolved Hide resolved
@Copons
Copy link
Contributor

Copons commented Jan 27, 2021

I wonder if "section" is the right term for this. 🤔

Somehow my brain is stuck thinking that "location" might be more appropriate, as a kind of callout to register_nav_menu.

Neither sound perfect, though. Maybe we already have a WordPress-y term that fits this use-case?

@Addison-Stavlo
Copy link
Contributor Author

Addison-Stavlo commented Jan 27, 2021

I wonder if "section" is the right term for this. 🤔

@Copons - Yeah, I'm not certain what the best name is either. We were discussing this in the above comments (#28410 (comment)), which I 'unresolved' for now if we want to keep discussing better alternatives.

@mattwiebe
Copy link
Contributor

The closest prior art in WP for this is Widget Areas, itself an attempt at better naming for Sidebars that were no longer always on the side, or a bar, for that matter.

So I'd suggest wp_template_area for the taxonomy, or whatever variation of wp_ and/or template_ prefixes we think are desirable (I would use both to maintain the ties to wp_template and wp_template_part).

The main reason I do like section (but with wp_template_section as the full name) is that it maps to the HTML semantic <section> tag.

Otherwise zone and region are nice standouts from my trip to the thesaurus.

@Addison-Stavlo
Copy link
Contributor Author

@mattwiebe - That makes sense to me! Updated now so we register the term as wp_template_section but we can still query and handle json with just section (sort of how templates and template parts have the theme attribute for the wp_theme term). Do you think that makes sense?

@Addison-Stavlo
Copy link
Contributor Author

Addison-Stavlo commented Feb 1, 2021

Updated per feedback:

  • changed the registered tax term to have an appropriate prefix.
  • made sure we are not decoding json more than once per request.
  • added template part specific tests using this term in block-templates and rest controller tests.

Copy link
Member

@david-szabo97 david-szabo97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me ✅ Left a few non-blocker (nitpicking) comments/feedbacks 😄

lib/full-site-editing/block-templates.php Outdated Show resolved Hide resolved
lib/full-site-editing/block-templates.php Outdated Show resolved Hide resolved
$this->assertEquals( 'header', $template_part->title );
$this->assertEquals( '', $template_part->description );
$this->assertEquals( 'wp_template_part', $template_part->type );
// TODO - update null to 'header' once tt1-blocks theme.json updated for template part section info.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels weird that we are depending on the TT1B theme for unit tests. Isn't there a way to create a theme fixture and use that for unit testing? (Not a blocker, but it would be a great follow up)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't there a way to create a theme fixture and use that for unit testing?

🤔 Im not sure the best way to go about that. It seems like it would need to be installed and activate-able like a regular theme, with the same file structures. And at that point maybe using TT1B just makes the most sense (as opposed to creating and maintaining a separate one just for testing) since it is the most kept up-to-date block-based theme that we are developing FSE around currently. I wonder if @youknowriad has given this any thought previously?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Riad is AFK until next week. Personally, I'm leaning towards using TT1 for the reasons Addison presents.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It makes more sense for E2E tests. I don't think it's reasonable for unit tests. We opened an issue to discuss it: #28692 Would love to hear your thoughts. It's not a blocker, just a thought 😄

@Addison-Stavlo
Copy link
Contributor Author

Let's go with "areas":

👍 Sounds good. Updated! ✅

aristath added a commit to aristath/q that referenced this pull request Feb 10, 2021
@oandregal oandregal mentioned this pull request Feb 10, 2021
10 tasks
@david-szabo97
Copy link
Member

Tested according to the testing instructions and smoke tested the editor. Everything works fine! ✅

@jeyip
Copy link
Contributor

jeyip commented Feb 10, 2021

Testing

Behavior

Followed the instructions and everything is working as expected with the new area changes.

  • Verify the term is added on singular requests and persists across saving.
  • Verify querying by the term works for both non-custom and custom template parts.
  • Verify this does not work for unsupported types.
  • Smoke test the normal template part flows.

@jeyip
Copy link
Contributor

jeyip commented Feb 10, 2021

Oh! My mistake. I am seeing something potentially odd. +1 whenever we resolve this conversation.

I added a new template part to the tt1-blocks index template in the site editor. The area value seems strange "WP_TEMPLAT_PART_AREA_UNCATEGORIZED"

Screen Shot 2021-02-10 at 6 47 30 AM

@Copons
Copy link
Contributor

Copons commented Feb 10, 2021

Oh! My mistake. I am actually seeing something potentially strange. +1 whenever we resolve this conversation.

I added a new template part to the tt1-blocks index template in the site editor. The area value seems strange "WP_TEMPLAT_PART_AREA_UNCATEGORIZED"

The typo is here:

https://github.com/WordPress/gutenberg/pull/28410/files#diff-805d551e09a2516b29027c017fcf01c1cf36e7131af223322df72ac22e755f7eR370

Wonder why PHP evaluates an undefined constant as a string literal, though... 😮

@Addison-Stavlo
Copy link
Contributor Author

Oh! My mistake. I am seeing something potentially odd.
The typo is here:

Oh good catch! I assumed there would be typos from going through and renaming everything but thought I had caught them all. Should be fixed now.

Wonder why PHP evaluates an undefined constant as a string literal, though... 😮

TIL 🤷‍♀️

}

if ( isset( $theme_data[ $template_info['slug'] ]['area'] ) ) {
$template_info['area'] = gutenberg_filter_template_part_area_type( $theme_data[ $template_info['slug'] ]['area'] );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's some inconsistency in different parts of the code base for instance in this function namegutenberg_filter_template_part_area_type we refer to the "area" as "type" which can be confusing especially since we already have a "type" property on the template and template area objects.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Id say here we refer to 'area' as 'area', and 'type' more refers to the different allowed values for that area term. Perhaps gutenberg_filter_template_part_area_value would make more sense?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like value better, but why not just gutenberg_filter_template_part_area ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that works too, names are hard 😅

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gziolo
Copy link
Member

gziolo commented Mar 12, 2021

Can you point me to the documentation that explains how to use templateParts in theme.json?

Can area hold a value that is translatable? Based on the example in the description of this PR, it doesn't need to be translated, but in the unit test I see "Some area" so I'm no longer sure about it.

@Addison-Stavlo
Copy link
Contributor Author

Hi @gziolo!

Can you point me to the documentation that explains how to use templateParts in theme.json?

The example in the PR description should work, but here is how it is set up in tt1-blocks (https://github.com/WordPress/theme-experiments/blob/1a4128f7c2c741e9c14b4c2a6bffd9c5b06e77e2/tt1-blocks/experimental-theme.json#L2-L9).

Can area hold a value that is translatable?

I don't think translation makes sense here, as only specific values are allowed and these are all "under the hood". When we surface an allowed value in the editor as an option, that is translated.

Based on the example in the description of this PR, it doesn't need to be translated, but in the unit test I see "Some area" so I'm no longer sure about it.

I believe the thought behind that unit test is to ensure that if the value is registered as something that is not supported, that it gets turned into the 'uncategorized' value. So "some area" is just an arbitrary unsupported string that should come get mapped to 'uncategorized'.

@Addison-Stavlo
Copy link
Contributor Author

editing comments seems a bit broken at the moment:

Can you point me to the documentation that explains how to use templateParts in theme.json?

I think we need to add some proper documentation for this. Do you know where the best place for that would be?

@oandregal
Copy link
Member

I think we need to add some proper documentation for this. Do you know where the best place for that would be?

A good first step would be to add it to the current theme.json spec document (source).

@Addison-Stavlo
Copy link
Contributor Author

A good first step would be to add it to the current theme.json spec document (source).

👍 - Thanks! That sounds like a good place to start - #30118

@@ -237,6 +280,15 @@ function gutenberg_get_block_templates( $query = array(), $template_type = 'wp_t
),
);

if ( 'wp_template_part' === $template_type && isset( $query['area'] ) ) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'area' is a new key under $query and isn't documented in the gutenberg_get_block_templates docblock. @Addison-Stavlo, could you follow up with that quick addition? 🙏

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Certainly! My apologies for the oversight there earlier - #32746

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not at all, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.