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

Navigation: Try adding navigation link variants via server #29095

Merged
merged 12 commits into from
Mar 8, 2021

Conversation

gwwar
Copy link
Contributor

@gwwar gwwar commented Feb 17, 2021

The navigation block currently allows insertion of Links, Post Links, Page Links, Tag Links and Category Links. This PR adds the ability to insert links for custom post types and taxonomies. If we install a Portfolio plugin for example, we should be able to add Portfolio Links.

In master, the list of link variations is hardcoded. This PR experiments with registering navigation link variants using register_block_type_from_metadata and passing not only a render callback, but the variations array. One benefit of doing this is being able to fetch post types and taxonomies and filter by show_in_nav_menus which is not exposed via the REST API. It also has some flexibility in pulling other data from the server without needing to bloat the API response (values here are unlikely to be reused elsewhere).

Part of #24814, Alternative to #29011, Requires WordPress/wordpress-develop#1015 to test.

Before After
Screen Shot 2021-02-24 at 8 40 12 PM Screen Shot 2021-03-01 at 12 47 07 PM
navigationlink.mp4

TODO

Testing Instructions with WordPress/wordpress-develop#1015

  • Setup a local environment of your choice using wordpress-develop
  • Checkout the wordpress develop banch in Try making server aware of block variants wordpress-develop#1015.
  • Setup gutenberg and checkout try/block-server-variants . One way of doing this on a local install is to link this via ln -s your-gutenberg-checkout-path your-wordpress-local-path/wp-content/plugins/gutenberg. Run npm run build in your gutenberg checkout
  • Install a plugin with some custom post types and taxonomies
  • Edit a post
  • Click on the block inserter, and add a navigation block
  • Click start with empty
  • Click on the block inserter in navigation
  • Click on show more. We should see installed custom post types and taxonomies as link variant options
  • Verify that there are no errors in console or in the server error log.
With Server Patch
109104191-6853b400-76e0-11eb-89b4-320156250f73

If Custom Post Type or Taxonomy does not define new item_link or item_link_description labels it shows the fallback:

Screen Shot 2021-03-01 at 12 34 45 PM

With item_link or item_link_description labels

Screen Shot 2021-03-01 at 12 47 07 PM

This will require manually modifying a taxonomy or post_type registration since no plugin has added this yet:
Screen Shot 2021-03-01 at 12 50 22 PM

CPT Drafts should not render on Navigation Block

  • Publish a few custom post type posts
  • Add the CPT links to a navigation block
  • Verify that the links render on the frontend
  • Set one of the CPT posts to 'draft' status, by updating visibility settings to private
  • The private CPT post link should not render on the published post or page view

Screen Shot 2021-02-26 at 10 17 35 AM

Testing Instructions for other WP versions

  • Checkout this branch
  • Install a plugin with some custom post types and taxonomies
  • Edit a post
  • Click on the block inserter, and add a navigation block
  • Click start with empty
  • Click on the block inserter in navigation
  • We should see the fallback variations of (Link, Post, Page, Tag, Category) but not the installed variations.
  • Verify that there are no errors in console or in the server error log.
Fallback
Screen Shot 2021-02-26 at 8 49 47 AM

@github-actions
Copy link

github-actions bot commented Feb 17, 2021

Size Change: -50 B (0%)

Total Size: 1.39 MB

Filename Size Change
build/a11y/index.js 1.14 kB -1 B (0%)
build/block-directory/index.js 9.1 kB +2 B (0%)
build/block-editor/index.js 125 kB -1 B (0%)
build/block-library/index.js 148 kB -86 B (0%)
build/components/index.js 272 kB +5 B (0%)
build/compose/index.js 11.1 kB +4 B (0%)
build/core-data/index.js 16.8 kB -2 B (0%)
build/customize-widgets/index.js 4.09 kB +2 B (0%)
build/data-controls/index.js 830 B -1 B (0%)
build/data/index.js 8.87 kB -1 B (0%)
build/date/index.js 31.8 kB -1 B (0%)
build/edit-navigation/index.js 11 kB +2 B (0%)
build/edit-site/index.js 26.4 kB -1 B (0%)
build/edit-widgets/index.js 20.2 kB +1 B (0%)
build/editor/index.js 42.1 kB +32 B (0%)
build/format-library/index.js 6.77 kB +1 B (0%)
build/i18n/index.js 4.01 kB +1 B (0%)
build/is-shallow-equal/index.js 699 B +1 B (0%)
build/list-reusable-blocks/index.js 3.14 kB -2 B (0%)
build/media-utils/index.js 5.36 kB -1 B (0%)
build/notices/index.js 1.86 kB -1 B (0%)
build/react-i18n/index.js 1.45 kB -1 B (0%)
build/rich-text/index.js 13.5 kB -1 B (0%)
build/server-side-render/index.js 2.82 kB +1 B (0%)
build/shortcode/index.js 1.7 kB -1 B (0%)
build/url/index.js 3.02 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/annotations/index.js 3.79 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 665 B 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-editor/style-rtl.css 12.1 kB 0 B
build/block-editor/style.css 12.1 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 479 B 0 B
build/block-library/blocks/button/style.css 479 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 364 B 0 B
build/block-library/blocks/buttons/style.css 363 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 689 B 0 B
build/block-library/blocks/gallery/editor.css 690 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/editor-rtl.css 681 B 0 B
build/block-library/blocks/navigation-link/editor.css 683 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 694 B 0 B
build/block-library/blocks/navigation-link/style.css 692 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.34 kB 0 B
build/block-library/blocks/navigation/editor.css 1.34 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 213 B 0 B
build/block-library/blocks/navigation/style.css 214 B 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 288 B 0 B
build/block-library/blocks/paragraph/style.css 289 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 814 B 0 B
build/block-library/blocks/query/editor.css 812 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 115 B 0 B
build/block-library/blocks/site-logo/style.css 115 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.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.32 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 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 390 B 0 B
build/block-library/blocks/table/style.css 390 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/template-part/editor-rtl.css 557 B 0 B
build/block-library/blocks/template-part/editor.css 556 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.08 kB 0 B
build/block-library/common.css 1.08 kB 0 B
build/block-library/editor-rtl.css 9.52 kB 0 B
build/block-library/editor.css 9.51 kB 0 B
build/block-library/style-rtl.css 8.85 kB 0 B
build/block-library/style.css 8.85 kB 0 B
build/block-library/theme-rtl.css 736 B 0 B
build/block-library/theme.css 736 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.3 kB 0 B
build/components/style-rtl.css 15.5 kB 0 B
build/components/style.css 15.5 kB 0 B
build/customize-widgets/style-rtl.css 168 B 0 B
build/customize-widgets/style.css 168 B 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/style-rtl.css 1.26 kB 0 B
build/edit-navigation/style.css 1.25 kB 0 B
build/edit-post/index.js 307 kB 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-site/style-rtl.css 4.41 kB 0 B
build/edit-site/style.css 4.41 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/style-rtl.css 3.9 kB 0 B
build/editor/style.css 3.9 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 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/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.96 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/nux/index.js 3.42 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.61 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.83 kB 0 B
build/reusable-blocks/index.js 3.81 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/token-list/index.js 1.27 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

return settings;
}

addFilter(
Copy link
Member

@gziolo gziolo Feb 23, 2021

Choose a reason for hiding this comment

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

The fact that we register this filter as a side effect next to its definition isn't ideal but I guess it's fine since it's a special case. We could add this filter inside:

export const __experimentalRegisterExperimentalCoreBlocks =

Although it creates some indirection. The benefit would be that this code would be eliminated if the block isn't bundled. However, I assume that this block is going to be promoted to stable in WordPress 5.8 so 🤷🏻

Copy link
Contributor Author

Choose a reason for hiding this comment

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

🤔 we might be able to avoid the icon handling if we say added string enum support for the @wordpress/icons package.

isActive is a bit trickier. Have we in practice seen different isActive functions for variant X and variant Y in the same variants list? We might be able to pull this up a level.

Although it creates some indirection. The benefit would be that this code would be eliminated if the block isn't bundled.

Oh interesting. I'd figure that the block already being behind the enableFSEBlocks flag would keep it out of the bundle. I'm open to experimenting with placement, though what it adds is probably pretty small.

Copy link
Member

Choose a reason for hiding this comment

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

I think it's inevitable to use the filter on the client. I raised it mostly so you were aware of the implications it creates.

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 Do folks mind if we keep this as is for now? The filter does run if we exclude the navigation link from the block library loader, but the alternative of adding it in __experimentalRegisterExperimentalCoreBlocks gets relatively messy.

return array(
'name' => $name,
/* translators: %s: Entity type, eg: Post Link, Page Link, Category Link, Tag Link, Portfolio Link etc */
'title' => sprintf( __( '%s Link' ), $entity->labels->singular_name ),
Copy link
Contributor Author

@gwwar gwwar Feb 23, 2021

Choose a reason for hiding this comment

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

@gziolo any recommendations on who to ask for i18n advice here? It's not ideal that we're using another translated label to build up these strings.

Copy link
Member

Choose a reason for hiding this comment

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

I think it's fine and follows best practices as listed at https://codex.wordpress.org/I18n_for_WordPress_Developers.

@swissspidy, can you confirm if it is the right way to go?

Copy link
Member

Choose a reason for hiding this comment

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

get_post_type_labels() shoulld be extended in core to have a new item_link entry set to Post Link / Page Link. Same for A link to a %s. below (maybe with key item_link_description?).

For example, in German the translation for A link to a %s. changes depending on the post type.

A link to a post -> Ein Link zu einem Beitrag
A link to a page -> Ein Link zu einer Seite

sprintf( __( 'A link to a %s.' ), $entity->labels->singular_name ) doesn't allow for that.

Related: https://core.trac.wordpress.org/ticket/51387 and #19144 (comment)

Copy link
Member

Choose a reason for hiding this comment

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

Thank you @swissspidy. I can see how speaking German makes it easier to reason about those challenges with translations. In Polish it would be:

  • Link do wpisu
  • Link do strony

When I think more about it, it gets even more fun in Polish because you couldn't share $entity->labels->singular_name:

  • To jest wpis (This is post)
  • To jest strona (This is page)

So I guess your proposal should address those type of issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the guidance here @swissspidy @gziolo. I can open a trac issue and create a patch for a new entry in get_post_type_labels

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I prototyped the change in WordPress/wordpress-develop@298bbd1 and 5df7ec4. Happy to pull this out into a smaller PR.

I ended up adding some fallback logic, so we wouldn't end up with "Post Link" labels for other CPTs that haven't defined it.

New Label Fallback (notice the capitalization in description because this is built with singular_name)
Screen Shot 2021-02-24 at 1 38 08 PM Screen Shot 2021-02-24 at 1 38 01 PM

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Decided to pull out the fallback so behavior looks like this if labels are undefined:
Screen Shot 2021-03-01 at 8 58 26 AM

@gwwar gwwar self-assigned this Feb 26, 2021
@gwwar gwwar marked this pull request as ready for review February 26, 2021 16:54
@gwwar
Copy link
Contributor Author

gwwar commented Mar 1, 2021

  • As a heads up this uses a new post type/taxonomy label, so most folks will see the defaults like "Post Link" for a CPT until it's implemented by plugin developers.
  • I also added a small change to make sure default variants Post, Page, Tag, Category are at top.

@gwwar
Copy link
Contributor Author

gwwar commented Mar 1, 2021

Thanks for the reviews @gziolo @vcanales @swissspidy

The last item for consideration is if it's okay to keep the addFilter call in hook.js as is, or if I should move the block filter to __experimentalRegisterExperimentalCoreBlocks. Tradeoffs are that this code runs even when nav link isn't registered / some indirection + messier code otherwise.

Theoretically I can merge this before the server PR, but we might want to see if WordPress/wordpress-develop#1015 has traction first.

@gziolo
Copy link
Member

gziolo commented Mar 8, 2021

The last item for consideration is if it's okay to keep the addFilter call in hook.js as is, or if I should move the block filter to __experimentalRegisterExperimentalCoreBlocks. Tradeoffs are that this code runs even when nav link isn't registered / some indirection + messier code otherwise.

It's probably fine to leave it as is. If it becomes more popular then we can think about some sophisticated approach that optimizes the bundle size. We could for instance return the hooks as an array of arrays and include in:

const { metadata, settings, name } = block;
if ( metadata ) {
unstable__bootstrapServerSideBlockDefinitions( { [ name ]: metadata } );
}

const { metadata, settings, name, hooks } = block; 
for ( const hookArgs of hooks ) {
    addFilter( ...hookArgs );
}

It becomes a bit complex though 😄

@gwwar
Copy link
Contributor Author

gwwar commented Mar 8, 2021

Thanks to @gziolo we should expect the server side of this to land sometime this week after the 5.7 release WordPress/wordpress-develop#1015 (comment)

Going to land the client patch first. Thanks again for the reviews @swissspidy @gziolo @vcanales

@gwwar gwwar merged commit cd0003c into trunk Mar 8, 2021
@gwwar gwwar deleted the try/block-server-variants branch March 8, 2021 16:40
@github-actions github-actions bot added this to the Gutenberg 10.2 milestone Mar 8, 2021
nylen pushed a commit to nylen/wordpress-develop-svn that referenced this pull request Mar 12, 2021
Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to WordPress/gutenberg#29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.



git-svn-id: https://develop.svn.wordpress.org/trunk@50527 602fd350-edb4-49c9-b593-d223f7449a82
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Mar 12, 2021
Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to WordPress/gutenberg#29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.



git-svn-id: https://develop.svn.wordpress.org/trunk@50527 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Mar 12, 2021
Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to WordPress/gutenberg#29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.


Built from https://develop.svn.wordpress.org/trunk@50527


git-svn-id: http://core.svn.wordpress.org/trunk@50140 1a063a9b-81f0-0310-95a4-ce76da25c4cd
gMagicScott pushed a commit to gMagicScott/core.wordpress-mirror that referenced this pull request Mar 12, 2021
Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to WordPress/gutenberg#29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.


Built from https://develop.svn.wordpress.org/trunk@50527


git-svn-id: https://core.svn.wordpress.org/trunk@50140 1a063a9b-81f0-0310-95a4-ce76da25c4cd
...( ! variation.icon && {
icon: getIcon( variation.name ),
} ),
...( ! variation.isActive && {
Copy link
Member

Choose a reason for hiding this comment

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

@gwwar, I was thinking about how we could eventually get rid of the filter that has to inject isActive to every variation defined on the server. I share my thoughts in #30739.

F-Wilke pushed a commit to FiliagoDev/WordPress that referenced this pull request Jul 31, 2021
Currently block variations are only defined on the client. In some cases, creating block variations on the server can be very useful, especially when needed data is not exposed in the REST APIs.

Related to WordPress/gutenberg#29095.

Props: gwwar, timothyblynjacobs.
Fixes: #52688.


Built from https://develop.svn.wordpress.org/trunk@50527


git-svn-id: http://core.svn.wordpress.org/trunk@50140 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@ndiego
Copy link
Member

ndiego commented May 24, 2023

@gziolo @gwwar I have been using this functionality for a while, but I only just realized it does not appear to be in Core, only Gutenberg. Is there a specific blocker here?

@gziolo
Copy link
Member

gziolo commented May 24, 2023

In theory, it should work the same in WordPress core. However, maybe the issue reported in #49678 is the reason why it only works with the Gutenberg plugin. As far as I can tell, the same logic is in place in both places:

https://github.com/WordPress/wordpress-develop/blob/52f05444bab8659076a3cd6b5282ea44af44da86/src/wp-includes/blocks/navigation-link.php#L366

@ndiego
Copy link
Member

ndiego commented May 24, 2023

However, maybe the issue reported in #49678 is the reason why it only works with the Gutenberg plugin.

Oh that's right, I just tested that issue 🤦‍♂️ I can confirm that changing the priority, makes it work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants