Improve Wagtail admin editor experience for article authoring #39
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
This is a blog-centric site, but the article authoring experience in Wagtail admin feels like a second-class citizen. Key pain points:
No dedicated "Articles" menu item — editors must navigate Pages → Home → Articles to reach the article listing. Every other content type (Authors, Comments) has a top-level admin menu entry.
No post scheduling or published-date control —
ArticlePagerelies on Wagtail's built-infirst_published_at(auto-set on first publish) and has no explicitpublished_datefield. There is no way to:Flat, unsorted article listing — the page explorer shows all articles in a flat list with no filtering, sorting, or status indicators beyond Wagtail's defaults. For a growing catalogue of posts this quickly becomes unwieldy.
No draft/review workflow visibility — there is no at-a-glance way to see which articles are drafts, scheduled, or live from the listing.
Current Setup (analysis)
ArticlePage(SeoMixin, Page)— standard Page with category, author, hero_image, summary, StreamField body, tags, read_time, comments_enabled-first_published_at; no explicit date fieldadd_to_admin_menu=True); Comments → top-level menu (snippet); Categories & TagMetadata → snippets (no top-level menu)go_live_at/expire_atusage, nopublished_datefieldHomePage→ArticleIndexPage→ArticlePage(leaf)Proposed Improvements
1. Add "Articles" to the admin menu (high priority, low effort)
Use a
wagtail_hooks.pyhook to register an Articles menu item. SinceArticlePageis a Page (not a snippet), the cleanest approach is:@hooks.register('register_admin_menu_item')to add an "Articles" link pointing to the page explorer filtered toArticleIndexPagechildren.PageListingViewSet(available in Wagtail 6+) to create a dedicated Articles listing with custom columns, filters, and ordering — this gives a much better UX than the raw page explorer.2. Add a
published_datefield + scheduling support (high priority, medium effort)published_date = models.DateTimeField(null=True, blank=True)toArticlePage.first_published_aton first publish (viasave()/publish()override) so existing content migrates cleanly.content_panelsso editors can override/backdate it.-published_dateinstead of-first_published_at.go_live_at/expire_atfields already exist on all Pages — surface them in the editor panels (they're hidden by default). This gives scheduling for free with zero custom code. Add them to a "Publishing" panel group alongsidepublished_date.3. Improve the article listing UX (medium priority, medium effort)
Using
PageListingViewSet(or a custom admin view), provide:4. Organise the content panels with
TabbedInterfaceorObjectList(low priority, low effort)Group
ArticlePagefields into logical sections:This reduces visual clutter on the edit screen and makes the form feel more intentional.
5. Add a simple admin dashboard panel (low priority, low effort)
Register a
construct_homepage_panelshook to show a quick-glance panel on the Wagtail admin dashboard:Out of Scope
Implementation Notes
published_datemigration should auto-populate fromfirst_published_atfor existing articles.PageListingViewSetnatively — prefer this over legacyModelAdmin.