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

[Block Library]: Add new Read More block (post link) #37649

Merged
merged 4 commits into from
Feb 4, 2022

Conversation

ntsekouras
Copy link
Contributor

@ntsekouras ntsekouras commented Dec 29, 2021

Resolves: #32529
Resolves: #25450
Resolves: #33288
Resolves: #37247

This PR adds a new Read More block (post link) which is intended to be used inside a Query Loop, as there is no point to be present in any other context.

Notes

  1. This block is just a link without any wrapper, so In order to align the link you need to wrap it in another block that can handle the aligning, most preferably a Row block to use its content justification options. Also because is just a link, the way to control the color of the link is through the highlight control in RichText toolbar options.
  2. This PR hasn't changed anything in Post Excerpt that has this option (with more limited design options), but in many designs we want to have a separate block for the post link and without having the excerpt block. If you have both Post Excerpt and Post Link blocks, you can use this new block only, by just leaving the Post Excerpt's read more input empty, which in that case doesn't print anything.
post_link.mov

/**
* WordPress dependencies
*/
import { link as icon } from '@wordpress/icons';
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 would need a new icon here. @jasmussen, @jameskoster or any designer that finds some time 😄

@github-actions
Copy link

github-actions bot commented Dec 29, 2021

Size Change: +1.78 kB (0%)

Total Size: 1.14 MB

Filename Size Change
build/block-editor/index.min.js 141 kB +52 B (0%)
build/block-library/blocks/cover/style-rtl.css 1.4 kB +179 B (+15%) ⚠️
build/block-library/blocks/cover/style.css 1.4 kB +180 B (+15%) ⚠️
build/block-library/blocks/image/style-rtl.css 500 B -7 B (-1%)
build/block-library/blocks/image/style.css 503 B -8 B (-2%)
build/block-library/blocks/navigation/editor-rtl.css 1.95 kB +33 B (+2%)
build/block-library/blocks/navigation/editor.css 1.96 kB +35 B (+2%)
build/block-library/common-rtl.css 921 B +13 B (+1%)
build/block-library/common.css 919 B +14 B (+2%)
build/block-library/editor-rtl.css 10.1 kB +27 B (0%)
build/block-library/editor.css 10.1 kB +26 B (0%)
build/block-library/index.min.js 166 kB +276 B (0%)
build/block-library/style-rtl.css 11.1 kB +279 B (+3%)
build/block-library/style.css 11.1 kB +283 B (+3%)
build/components/index.min.js 215 kB +18 B (0%)
build/components/style-rtl.css 15.5 kB +22 B (0%)
build/components/style.css 15.5 kB +20 B (0%)
build/edit-post/index.min.js 29.7 kB +81 B (0%)
build/edit-site/index.min.js 41.5 kB +64 B (0%)
build/edit-widgets/index.min.js 16.7 kB +65 B (0%)
build/editor/index.min.js 38.4 kB +24 B (0%)
build/plugins/index.min.js 1.95 kB +107 B (+6%) 🔍
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.22 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/style-rtl.css 1.85 kB
build/block-library/blocks/navigation/style.css 1.84 kB
build/block-library/blocks/navigation/view.min.js 2.81 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 402 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 214 B
build/block-library/blocks/tag-cloud/style.css 215 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 676 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.4 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 13.4 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16.2 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.15 kB
build/edit-post/style.css 7.14 kB
build/edit-site/style-rtl.css 7.22 kB
build/edit-site/style.css 7.21 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.75 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/primitives/index.min.js 917 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.58 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@jasmussen
Copy link
Contributor

Thanks for the PR! Always happy to create an icon when needed.

This PR extracts the "Read More" part from the Excerpt block:

read more in excerpt

It gets a bit confusing if it's used after the very same excerpt, though, can we do anything here?

two read more links

The prolific use of "Read more" also immediately made me think of the existing "More" block. Is there an opportunity to use that one instead, even if we need to add some changes to make it context aware?

Screenshot 2021-12-29 at 09 20 58

To be clear, I understand the use case, it's just a permalink you can put anywhere. For my own theme I'm using a Post Title block with a custom heading level, including it in post meta to link to the destination. It's pretty hacky and would be served better as a link.

In that light, I've no objection to this landing, but it still makes me wonder if there isn't a smarter approach we can take. While these bespoke blocks solve the immediate problems. But this is at the expense of a proliferating the amount of blocks we have.

Should the post excerpt block include this separate block so you can delete it if you don't want it? Should the "Read more" part of it be removed from the excerpt block since it's separate? Are there any other small wins we can find that help eliminate the duplicated text of a post excerpt block followed by the separate post link block?

Longer term, it'd be nice to think of a systematic approach to the problem. #31815 discusses variable substitutions for images, #35596 asks for the "Post Author" block to be split out, and #26899 discusses inline post meta. The last one is the key bit for me: some themes include post metadata as prose, such as "Alice in Wonderland was posted in Book Reviews on Tuesday May 3rd, 2020". Is there a point where we have blocks for only the most basic things, but inline tokens you can write, such as {{post-link}} or {{post-date}}?

@jasmussen
Copy link
Contributor

One quick thought: can we/should we limit the Post Link to only be inserted inside a Query block, to increase the contextuality and reduce the overall footprint of the inserter at the root level?

@ntsekouras
Copy link
Contributor Author

Thanks for the feedback Joen! ⭐

This PR extracts the "Read More" part from the Excerpt block:

It doesn't, it leaves the excerpt block as is for now.

It gets a bit confusing if it's used after the very same excerpt, though, can we do anything here?

We can change the placeholder of this block for start.

The prolific use of "Read more" also immediately made me think of the existing "More" block. Is there an opportunity to use that one instead, even if we need to add some changes to make it context aware?

I don't think this is possible as they are very different blocks. The existing more block is used for:
Content before this block will be shown in the excerpt on your archives page.. This is a very specific use case and I'm wondering if it has a place in the new block themes. If we should hide one of two, I guess I would prefer to hide the old one 😄 .

To be clear, I understand the use case, it's just a permalink you can put anywhere.
Should the post excerpt block include this separate block so you can delete it if you don't want it?

We should be able to add a post link without the Post Excerpt block, no?

Should the "Read more" part of it be removed from the excerpt block since it's separate?

There is existing content that uses that and if we change it, we can't handle deprecations that would create a new block in its place. Also the excerpt read more has server side filters applied. So I think so, but I'm not sure it will be quite easy and I think it will be a breaking change.

Longer term, it'd be nice to think of a systematic approach to the problem. #31815 discusses variable substitutions for images,
... such as {{post-link}} or {{post-date}}?

This is a tricky one as we are talking about a templating engine and all that entails (attributes, styling and editing in general).

can we/should we limit the Post Link to only be inserted inside a Query block, to increase the contextuality and reduce the overall footprint of the inserter at the root level?

With the current APIs (like parent) I believe we can't because the ancestors aren't being taking into account, but we still need to add this inside any wrapper block like Row, etc..

@jasmussen
Copy link
Contributor

Thanks for the context! I understand the need for this block, my only hesitation is that it's a new block which is also partially built-in to an existing block, causing both UI and code duplication. This might be necessary, but the duplication is likely to cause confusion (as shown, a post excerpt followed by a post link). Anything we can do there would be nice, it doesn't feel ideal.

@Mamaduka
Copy link
Member

Thanks for working on this, Nik. The code-wise PR looks great 👍

I can also understand some of the confusion this might cause to users after reading Joen's reply.

More often than not, I think block will be used in combination with the Post Exceprt. Maybe not directly below, but in the next group/row.

CleanShot 2021-12-29 at 14 28 06

@ndiego
Copy link
Member

ndiego commented Jan 2, 2022

What if we make the "Read More" link on the Post Except block conditional with a toggle? Something like "Enable read more link" above the existing "Show link on new line" toggle. This would be pretty handy because there are instances where I don't want the "Read More" link, but the text field annoyingly remains visible in the Editor?

I am happy to put this PR together if everyone thinks it might be worthwhile. It also removes some of the confusion around this PR since the "Read More" on the Post Excerpt block can be easily toggled off in favor of the dedicated Post Link block.

@jameskoster
Copy link
Contributor

Thanks for opening this PR and all the discussion so far, some excellent thoughts here.

It seems to me that this is essentially a block equivalent of the_permalink(), which makes me think we should get insight from more theme developers on this issue (@kjellr @MaggieCabrera @carolinan @ellenbauer).

I know it used to be common to place permalinks in various templates, but I'm not sure how prevalent that is these days... If it's not common then perhaps we can just make this an option of the excerpt block as has been suggested.

Another idea that avoids adding another block but still provides flexibility to themers would be to do something with the add-link interface. If I'm adding a link while editing a query in a template, perhaps I see an option to link to the queried post? Crude example:

Screenshot 2022-01-05 at 12 49 28

One benefit with this approach is that is makes it easy to add an inline permalink, where a dedicated block forces you to fiddle around with layout blocks.

@ndiego
Copy link
Member

ndiego commented Jan 5, 2022

Another idea that avoids adding another block but still provides flexibility to themers would be to do something with the add-link interface. If I'm adding a link while editing a query in a template, perhaps I see an option to link to the queried post?

Yeah this is an interesting approach. Likely a lot more complicated to implement than a simple Post Link block, but I like the concept. If done, this could/should be added to buttons as well. That should cover all use-cases where a theme designer would want to dynamically link to a post/page/cpt within a query loop.

Regardless a solution is needed and clearly the community wants it based on the number of issues. I do think a dedicated block is a bit more clear to newer users. But if there is concern about adding too many blocks, adding additional functionality to links/buttons should work as well.

@kjellr
Copy link
Contributor

kjellr commented Jan 5, 2022

It seems to me that this is essentially a block equivalent of the_permalink(), which makes me think we should get insight from more theme developers on this issue (@kjellr @MaggieCabrera @carolinan @ellenbauer).

I think adding a "link to this post" option in the link modal would make sense as a replacement for the_permalink(), but I don't think it's likely to be very discoverable for users.

Most of the traditional theme use cases for the_permalink() are already handled by a simple toggle/attribute: linking a title, featured image, or post date to the post for example. The only other common use case I can think of is just a "Read more" link, so it might be fine to add a dedicated "Read more" block here and call that done for now.

@luminuu
Copy link
Member

luminuu commented Jan 18, 2022

Most of the traditional theme use cases for the_permalink() are already handled by a simple toggle/attribute: linking a title, featured image, or post date to the post for example. The only other common use case I can think of is just a "Read more" link, so it might be fine to add a dedicated "Read more" block here and call that done for now.

Chiming in as I was looking for exactly this feature and I'm agreeing with @kjellr on this, a separate Read More link is absolutely helpful and enables more design options.

@ntsekouras
Copy link
Contributor Author

So what do you all think? Should we move forward with this one? If yes, we would need a new icon and a code review 😄

@ndiego
Copy link
Member

ndiego commented Jan 20, 2022

So what do you all think? Should we move forward with this one?

Yeah, I like it!

@kjellr
Copy link
Contributor

kjellr commented Jan 24, 2022

My only hesitation is the naming. Post link feels confusing to me. -More confusing when the options in the sidebar says Read more.

Yeah, I agree. Maybe this should be called a "Read more" block?

@aristath
Copy link
Member

aristath commented Jan 24, 2022

Yeah, I agree. Maybe this should be called a "Read more" block?

"read more" makes sense 👍

@luminuu
Copy link
Member

luminuu commented Jan 24, 2022

+1 for renaming the block to "Read More".

@ntsekouras ntsekouras changed the title [Block Library - Post Link]: Add new post link block [Block Library]: Add new Read More block (post link) Jan 25, 2022
Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

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

I tested this and it worked great! Codewise there is no reason apparent to me to hold back, if anything pops up we can improve.

Left one nit on the wording of the default placeholder. My nit is made worse by the fact that the RichText component when it is empty and showing the placeholder with an a tag the blinking cursor is not visible. It is completely invisible to the user that they should start writing text. @ntsekouras do you know of any such bug, because I was not able to open an issue, but I could repro in FF and Safari.

packages/block-library/src/read-more/edit.js Outdated Show resolved Hide resolved
@ntsekouras
Copy link
Contributor Author

Thank you all for the reviews and feedback!

My nit is made worse by the fact that the RichText component when it is empty and showing the placeholder with an a tag the blinking cursor is not visible. It is completely invisible to the user that they should start writing text

@draganescu I couldn't reproduce this in FF, Safari or Chrome. If this is a bug though, with some other combination or version or something, I guess it affects all RichText instances and we should look into it..

@ntsekouras ntsekouras merged commit 8e31571 into trunk Feb 4, 2022
@ntsekouras ntsekouras deleted the add/new-block-post-link branch February 4, 2022 08:02
@github-actions github-actions bot added this to the Gutenberg 12.6 milestone Feb 4, 2022
@scruffian
Copy link
Contributor

Can we update the post excerpt block to use this block instead of the current read more link that it has?

@getdave
Copy link
Contributor

getdave commented Feb 4, 2022

Very pleased to see this block land. Great work 👏

@carolinan
Copy link
Contributor

Can we update the post excerpt block to use this block instead of the current read more link that it has?

I think we should. I am not sure how to use the users existing texts, in the new block.

@ntsekouras
Copy link
Contributor Author

Can we update the post excerpt block to use this block instead of the current read more link that it has?

We can't because Post Excerpt doesn't use InnerBlocks. An alternative way I think, could be to explore to add a new field in Post Excerpt to toggle the visibility of adding a read more text.

@scruffian
Copy link
Contributor

We can't because Post Excerpt doesn't use InnerBlocks. An alternative way I think, could be to explore to add a new field in Post Excerpt to toggle the visibility of adding a read more text.

Could we update it to use InnerBlocks?

@ntsekouras
Copy link
Contributor Author

Could we update it to use InnerBlocks?

I don't think there is the need to do so, since this is a dynamic block getting the excerpt of the block. Inside Post Template we can add any other block we want.

@scruffian
Copy link
Contributor

I'm thinking about the UX...

If I add a post except block and I want to change the read more link then I need to hide it from the excerpt block and then add a read more block - I'm not sure that's how most users would expect it to work...

@ntsekouras
Copy link
Contributor Author

I'm thinking about the UX...

I'm working on a POC for this right now. If you add a new Post Excerpt block the control will not be displayed by default. So you'd just have to add the new block. I'll create a deprecation to show the control for existing blocks that had some content in read more in Post Excerpt

@ntsekouras
Copy link
Contributor Author

Here is the POC: #38662

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
New Block Suggestion for a new block [Package] Block library /packages/block-library
Projects
None yet