#65532 closed enhancement (fixed)
Editor: Improve Classic Editor status dropdown layout
| Reported by: | poligilad | Owned by: | joedolson |
|---|---|---|---|
| Priority: | normal | Milestone: | 7.1 |
| Component: | Editor | Version: | |
| Severity: | normal | Keywords: | has-patch has-screenshots commit |
| Cc: | Focuses: | ui, accessibility |
Description
In the Classic Editor publish box, the Status control is currently rendered as a compact <select> inside the editable Status panel.
The available choices are mutually exclusive and small in number:
- Published
- Pending Review
- Draft
- Scheduled, when applicable
This ticket proposes replacing that dropdown with a radio button group while preserving the existing submitted post_status value and save behavior.
The goal is to make the Status control easier to scan and interact with, and to bring the Classic Editor publish box closer to the block editor’s “Status & visibility” experience, where these publishing choices are presented as explicit options rather than compact form controls.
This should be a UI-only change. The underlying save contract should remain unchanged:
- The submitted field should continue to be post_status.
- Existing values such as publish, pending, draft, future, and private-related behavior should continue to work as they do today.
- OK should update the visible Status summary.
- Cancel should restore the previous status.
- Existing visibility behavior, including Private posts changing the visible status text to “Privately Published” and hiding the Status edit link, should be preserved.
The change should also keep the current progressive enhancement behavior in the publish box. The radio buttons would replace the select control inside the existing edit panel, rather than changing the overall publish box flow.
Related tickets I found, but which do not appear to be exact duplicates:
- #7745 covers long-standing confusion around private posts and status behavior.
- #37613 discusses publish box UI/spacing around Visibility controls.
- #17906 is a broader ticket about refactoring the submit/publish box.
- #12706 covers custom post status behavior and edge cases.
- #64308 is related to broader wp-admin visual refresh work.
None of those appear to specifically propose replacing the Classic Editor publish box Status dropdown with radio buttons while preserving the existing post_status submission behavior.
Attachments (2)
Change History (16)
This ticket was mentioned in PR #12304 on WordPress/wordpress-develop by @poligilad.
7 weeks ago
#1
- Keywords has-patch has-unit-tests added; needs-patch removed
@poligilad commented on PR #12304:
7 weeks ago
#2
I changed the direction of this PR after doing an extensibility audit of the Classic Editor Status control.
The original version replaced the legacy select#post_status with a radio group. That preserves the submitted post_status values for Core’s own statuses, but it does not preserve the practical DOM contract that Classic Editor integrations rely on.
The audit found real plugin code that depends on select#post_status as an implicit extension point:
- GeoDirectory appends custom status
<option>elements and reads the selected option to update the Save button text. - AnsPress appends
moderateandprivate_postoptions toselect#post_status. - WPAdverts appends/selects an
expiredoption and changes submit behavior based on the selected option. - BEA Post Status Admin appends custom statuses to the dropdown.
- PublishPress Statuses reads and manipulates
#post_statusas a select throughout its Classic Editor integration. - WordCamp CampTix Invoices appends
refundedandcancelledoptions toselect#post_status.
Core also still has assumptions around #post_status behaving like a select, for example in local autosave status handling.
Given that, this PR no longer changes the control type. It now keeps the existing dropdown and limits the change to safer layout improvements:
- keep
select name="post_status" id="post_status"intact; - make the dropdown full width in the publish box;
- move OK/Cancel below the dropdown for spacing consistency;
- add a regression test that protects the legacy select markup contract.
That makes this a smaller visual improvement while avoiding the compatibility break from removing select#post_status.
#3
@
7 weeks ago
- Keywords needs-screenshots added
- Milestone Awaiting Review → 7.1
Thanks for catching that the select usage isn't really readily changeable! I was coming in here to make a comment to that effect, and I was glad to see that you'd already caught that.
The test alone is potentially something that makes this worth adding, to protect that contract.
Can you add new screenshots to show the updated changes?
#5
@
7 weeks ago
- Summary Use radio buttons for the Classic Editor publish box Status control → Editor: Improve Classic Editor status dropdown layout
Thanks @joedolson!
And sure thing, just added. It'll end up being a much smaller change.
Also updated the Summary to better reflect the scope.
#6
@
6 weeks ago
With the reduction of scope, I agree with this change. Left a review on the PR - I think we can clean it up a bit before landing. Thanks @poligilad!
@poligilad commented on PR #12304:
6 weeks ago
#7
Thanks for the review @tyxla!
I updated the PR to keep this as a smaller compatibility-preserving layout change:
- removed the added OK/Cancel wrapper markup,
- deleted the markup regression test,
- simplified the CSS by removing
max-width, - kept the existing
select#post_statuscontract intact.
The remaining change is CSS-only for the Status dropdown layout: the select is full width, and the OK/Cancel controls sit below it.
#8
@
6 weeks ago
@poligilad with the reduction/changes in scope, the description of the ticket is no longer relevant.
Should we update it to reflect what we're doing, or is it intended to stay as the longer-term goal even after landing https://github.com/WordPress/wordpress-develop/pull/12304?
@poligilad commented on PR #12304:
6 weeks ago
#9
Thanks again for the review @tyxla!
- I pushed a small CSS-only follow-up that keeps the markup unchanged while tightening the responsive spacing.
- I also checked the layout at 480px and 720px; Status and Visibility now have matching OK/Cancel spacing.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)
## Summary
<select>with a radio group while preserving the submittedpost_statusvalues.This is scoped to the Status control only. Visibility UI changes are intentionally not included here.
## Testing
LOCAL_PORT=18089 npm run test:php -- --filter Tests_Admin_IncludesMetaBoxesvendor/bin/phpcs --standard=phpcs.xml.dist src/wp-admin/includes/meta-boxes.php tests/phpunit/tests/admin/includesMetaBoxes.phpnpx grunt jshint:core --file=js/_enqueues/admin/post.jsnpx grunt postcss:corenpm run build:devgit diff --checkcurl -I --max-time 10 http://localhost:18089