WordPress / gutenberg

The Block Editor project for WordPress and beyond. Plugin is available from the official repository.
https://wordpress.org/gutenberg/
Other
10.32k stars 4.12k forks source link

Include homepage in page lists when set to display latest posts #60772

Open jameskoster opened 4 months ago

jameskoster commented 4 months ago

The default configuration for the majority of WordPress sites is to display the latest posts on the homepage. However, the current edit flow for this setup is awkward and confusing for most users.

Identifying the Problem

The initial challenge in the edit flow is simply finding the page. Since the homepage displaying the latest posts is not technically a page, it does not appear in the page management interface (pages data view). This discrepancy means that users are directed to an area that does not support the editing task.

There are two primary pathways to edit the homepage in this scenario, neither of which is ideal:

  1. Site Editor Root Frame: Users can click the frame at the root of the Site Editor. This method is not clear to new users, only becoming so through experience.
  2. Templates Section: Users must identify the correct template to edit from options like Front Page, Blog Home, or Index. This process is complex and often beyond the grasp of those without technical expertise.

Once users navigate to one of these pathways, they encounter a template editing context filled with confusing titles such as "Blog Home" or "Index" and technical descriptions like, "Displays the latest posts as either the site homepage or as the 'Posts page' as defined under reading settings. If it exists, the Front Page template overrides this template when posts are shown on the homepage." This environment might be clear to seasoned theme developers, but it can overwhelm average users.

Proposed Improvements

Latest posts in page list

To improve the user experience, I suggest the following changes:

Screenshot 2024-08-12 at 13 16 50
Original issue### The problem In WordPress 6.5 the "Pages" panel in the site editor includes links to edit special 'pages' that resolve to display templates, specifically: * Posts page (when homepage is set to display latest posts in reading settings) * 404 * Search results Screenshot 2024-04-16 at 10 53 44 For WordPress 6.6, this sidebar is being replaced with the "List" layout in data views: Screenshot 2024-04-16 at 10 56 08 A consequence of this replacement is the loss of those aforementioned links. Continuing to provide shortcuts to the 404 and search results templates seems useful, but it's probably most important to provide access to edit the homepage when set to display latest posts. ### A solution utility A 'Utility' view accessed from the footer of the Pages sidebar could include any templates users often consider to be pages, IE: * Blog Home / Front Page (when homepage is set to display latest posts) * 404 * Search results In the future this could be expanded to include general archive templates like `category`, `tag`, `author`, etc. and any taxonomy-term-specific templates e.g. `category-recipes`, `author-admin`.
jameskoster commented 4 months ago

I noticed an item in https://github.com/WordPress/gutenberg/issues/59659 which describes a "Utility" view which includes 404 and search results.

That seems like the path of least resistance here, and avoids mixing record types in a single view which can often lead to awkward experiences due to incompatible fields.

jarekmorawski commented 4 months ago

To me, Utility feels a bit foreign in this context because the other items are related to page statuses and Utility is more of a type or function.

Maybe we'd move the link to the bottom of the sidebar, similar to the manage links under Patterns and Templates?

image
jameskoster commented 4 months ago

Yup, I think that can definitely work. The footer property of SidebarNavigationScreen can handle this placement.

youknowriad commented 4 months ago

Personally, I'm not sure we should be showing another data view for utility pages. There will be a lot of small issues like what happens when you click "back" on these pages, if these have a canonical url, you'll probably be back to the "templates" page.

Continuing to provide shortcuts to the 404 and search results templates seems useful

I understand the reasoning behind this: "Templates" is too confusing for regular users and they consider these as "pages" but I'd argue that trying to hide this distinction is in fact more confusing sometimes. So I wonder, how can we measure this? How can we ensure that it's actually solving an issue rather than adding more confusion.

For me it feels like a half baked solution: I think if we are to merge templates and pages, we should merge them fully (in the UI I mean) :P

jameskoster commented 4 months ago

we should merge them fully

I would support that, but wouldn't it create technical issues? Templates and Pages do not share all fields, so how would things like sorting & filtering work?

youknowriad commented 4 months ago

I would support that, but wouldn't it create technical issues? Templates and Pages do not share all fields, so how would things like sorting & filtering work?

Yes, indeed it's complex maybe it's fine to keep them separate like "static pages" and "dynamic pages" but my point is that we shouldn't have templates both in "templates" and "utility pages".

jameskoster commented 4 months ago

It may not be ideal, but to your point about confusion there are a couple of hints in the UI that indicate these are special/different to regular pages;

Alternatively we could be more explicit; name the view "Page templates" and also include templates like page.html.

In any case, as it stands this could arguably be called a regression from 6.5. It's hard to say how often folks are using the existing shortcuts, but I'm a little anxious about removing them entirely.

colorful-tones commented 3 months ago

With WordPress 6.6 Beta 1 targeted to be released in less than a day - Editor Triage Leads will move this to Punted to 6.6.1 for now.

ellatrix commented 1 month ago

I don't think this is material for a point release? Also how is this both an enhancement and a regression?

jameskoster commented 1 month ago

I updated this issue to concentrate solely on the "homepage set to display latest posts" issue(s).

jameskoster commented 1 month ago

I think if we are to merge templates and pages, we should merge them fully (in the UI I mean) :P

@youknowriad Noodling on this a bit, here's a potential design:

Merge post pages with Page list

jameskoster commented 1 month ago

Stripping the above back to an even smaller change; surfacing the latest posts page in the pages data view:

Latest posts in page list

cc @WordPress/gutenberg-design @youknowriad for feedback.

jasmussen commented 1 month ago

Can work. I wonder if that gray "homepage" chip can become blueberry with white text when the row is selected? And can/should that same chip be integrated in the description area on the right in the editor too?

youknowriad commented 1 month ago

I want to mention that technically is a bit too complex to that the point that I wonder if it's worth it. It's doable but without issues / bugs / big changes.

Basically we'll be showing two separate "entities" in the data views.

jameskoster commented 1 month ago

Yes this issue brings into start focus the complexity burden that the template hierarchy places on users 🙃

I wonder if it's worth it

I just want to re-iterate the problem, to make sure we're agreed that something needs to be done...

In regards to the questions, the idea was to 'hard-code' a page in the database. In terms of edit-ability and behavior it would be very similar to page_for_posts. So despite having a one or two of special rules (can't be deleted), it would still have all the standard meta data, so filtering / sorting would work as expected. It also means the page would appear in the wp-admin pages list too.

Does that make it sound any more (or less) feasible?

youknowriad commented 1 month ago

In regards to the questions, the idea was to 'hard-code' a page in the database.

You say in the "database", what does that mean. Actually create a page object? This is not how things work, today there's no "page" in the database, so the endpoint to fetch pages... don't return anything. If we are to force the presence of a page object in this case, we need IMO to create a trac ticket and discuss what that means for the WP framework (storage, when to create a page, is it always present when you install WP, what's the impact on the different php functions...)

jameskoster commented 1 month ago

Actually create a page object?

Yes, I appreciate I am trivialising 😭

Let's continue to explore other design options. Perhaps there's something we could do with the Navigation section to surface the homepage when set to display latest posts. That could make it more easily accessible in the site editor, but obviously require some re-imagining of the Navigation section.

Screenshot 2024-08-09 at 16 02 04

It wouldn't solve the confusion around why this page doesn't appear in the page management view, but perhaps a more polished Navigation section would make that issue less prominent.

What do you think @richtabor ?

youknowriad commented 1 month ago

To be honest, For me, it makes sense to always have a page set as "posts page" and that the WP settings would be about setting another static page as "front page" or "home page". I suspect that this is a bit easier to understand for user but this would be a change that is a bit more "fundamental" and not something that can be driven from the UI side only.

jameskoster commented 1 month ago

For me, it makes sense to always have a page set as "posts page"

That sounds very much like what has been suggested. IE on a fresh install there is a page object associated with displaying posts. In reading settings there would be one dropdown in the homepage control, no more radios:

Screenshot 2024-08-12 at 13 16 50

Additionally:

Or are you suggesting there could be a way to do this without registering the page object for latest posts?

youknowriad commented 1 month ago

@jameskoster yes, it's the same, basically I agree with you that this flow sounds great. The problem is that it's challenging and it's better addressed in Core (and not in Gutenberg)

richtabor commented 1 month ago

That sounds very much like what has been suggested. IE on a fresh install there is a page object associated with displaying posts. In reading settings there would be one dropdown in the homepage control, no more radios:

Yes, this is interesting.

The problem is that it's challenging and it's better addressed in Core (and not in Gutenberg)

How do we tackle this?

youknowriad commented 1 month ago

How do we tackle this?

Technically you mean, I have no idea. Practically I think we should consider opening a trac ticket to get more feedback from folks there and see how to proceed there. We also need a dev committed to push this forward as it's very impactful.

jameskoster commented 1 month ago

What's the best way to frame the trac ticket? I'm trying to boil this down to the bare essentials which is obviously quite tricky as it touches a lot:

felixarntz commented 1 week ago

@jameskoster Thanks for pinging me on #64620, great to find the conversation here!

Leaving some feedback based on how I understand what's being discussed:

In terms of backward compatibility, I could see something like this work:

Curious to discuss this further, and FWIW I'd be happy to support this from the Core side.

felixarntz commented 1 week ago

Related to https://github.com/WordPress/gutenberg/discussions/64620#discussioncomment-10548341, I wonder how we would handle block template rendering for the page_for_posts. Currently, the majority of themes will simply ignore whatever that page's content is, and render the blog template (home) instead. For that reason, WordPress users experienced with this will simply create the page and leave it empty.

This is strange UX though. So I wonder if what's rendered on that page could be tied more directly to the page itself. For example, if you want to use the page to render the blog, you can do so by having it render a relevant core/query block with inherit:true. We don't really need a separate template for this anymore, so I feel like the home template could be deprecated entirely, in favor of patterns that show the blog, which you could for instance select when creating the page_for_posts.

jameskoster commented 1 week ago

Is the idea that we would still have UI controls for both page_on_front and page_for_posts?

The idea was to simplify the UI/X by only having a single control; "Your homepage displays: page_on_front". I don't know that being able to change the posts page is all that intuitive, and it's a flow prone to user error.

Tracking page_for_posts would happen behind the scenes, when that page is created, see https://github.com/WordPress/gutenberg/issues/63667. Obviously we'd need to figure out how this would work in wp-admin.

If you wanted your blog to be the homepage you'd just mark it as page_on_front, either in the reading settings or in the editor (https://github.com/WordPress/gutenberg/issues/63666).

Do you see any pitfalls to this approach?

I wonder how we would handle block template rendering for the page_for_posts. Currently, the majority of themes will simply ignore whatever that page's content is, and render the blog template (home) instead.

Rather than adjusting the template behavior, a unique edit experience for page_for_posts seems reasonable to me. We have an issue for this one too: https://github.com/WordPress/gutenberg/issues/63748

Deprecating certain templates is an interesting idea and probably worth exploring, but it seems trickier to handle so likely a bit further off in the distance.

Curious to discuss this further, and FWIW I'd be happy to support this from the Core side.

Thank you ❤️

felixarntz commented 1 week ago

@jameskoster

Do you see any pitfalls to this approach?

I think there's one crucial problem with the approach: Not every site needs or wants to have a blog. So it would not be right to create a page_for_posts for every site and not provide a way to change/get rid of it.

Maybe a separate control is not the right way. But this scenario of not having any blog needs to be easily possible. Potentially we could solve this in a smart way, maybe automatically have a page_for_posts but only if/once there are any posts? Conversely, if there are no posts, that page would get deleted? Not sure about this, just thinking out loud. We do need to find a solution for this though.

Rather than adjusting the template behavior, a unique edit experience for page_for_posts seems reasonable to me. We have an issue for this one too: https://github.com/WordPress/gutenberg/issues/63748

Awesome, I'll take a look.

Deprecating certain templates is an interesting idea and probably worth exploring, but it seems trickier to handle so likely a bit further off in the distance.

I'm not sure how tricky it really is, but I get the sentiment. That said, I do think we should look at this with the long-term vision in mind and not focus on another solution just to avoid deprecating templates. What I mean is: If deprecating a template is what it takes to get the ideal solution, we shouldn't shy away from it in favor of a different path.

jameskoster commented 1 week ago

Not every site needs or wants to have a blog

Oh I agree 100%. To clarify; if the proposed changes were implemented, you'd remove the blog by setting the homepage to display a different page first, then simply delete your page_for_posts. To me this feels a bit more intuitive than setting the "Posts page" to nothing, then being left with a superfluous "Blog" page that you'll likely end up deleting anyway.

It also means we could further tidy up the reading settings UI by conditionally showing/hiding options like "Blog pages show at most" based on whether page_for_posts is set.

If deprecating a template is what it takes to get the ideal solution, we shouldn't shy away from it in favor of a different path.

Fair point, I agree we should explore all options.

felixarntz commented 1 week ago

Not every site needs or wants to have a blog

Oh I agree 100%. To clarify; if the proposed changes were implemented, you'd remove the blog by setting the homepage to display a different page first, then simply delete your page_for_posts. To me this feels a bit more intuitive than setting the "Posts page" to nothing, then being left with a superfluous "Blog" page that you'll likely end up deleting anyway.

That makes sense to me. Follow up question: How could a user get back a blog if they changed their mind?

It also means we could further tidy up the reading settings UI by conditionally showing/hiding options like "Blog pages show at most" based on whether page_for_posts is set.

Great idea, potentially. I'm not entirely sure though whether these options are only used for the blog. There are all kinds of other archives in WordPress that are unrelated but may still use those options, so we need to consider that.