WordPress 7.1 changes post list table semantics so the checkbox column is a `td` and the title column is a `th scope="row"`. Plugins that select `th.check-column`, `th input[type=checkbox]`, `td.column-title`, or row actions under a `td` can stop styling or binding events. Responsive collapsed cells also move to flex layout.
Use this for plugins and custom admin code that add post columns, bulk actions, inline controls, row badges, checkboxes, JavaScript listeners, responsive styles, or automated admin tests.
Quick answer
Search CSS, JavaScript, PHP-rendered fragments, and browser tests for assumptions about `th.check-column` and `td.column-title`. Update selectors to target stable classes or support both `td` and `th` across WordPress versions. Test posts, pages, custom post types, permissions, bulk selection, row actions, and narrow widths.
What to check first
- Search owned code for `th.check-column`, `th input`, `td.title`, `td.column-title`, `td.column-primary`, `.row-title`, `.post-state`, and `.row-actions`.
- Capture list-table markup on WordPress 7.0.2 and 7.1 for posts, pages, and each owned custom post type.
- Test editable, non-editable, private, draft, scheduled, trashed, and password-protected rows so conditional controls are covered.
- Run bulk selection, quick edit, row action, sortable column, keyboard navigation, and delegated JavaScript listener tests.
- Check collapsed mobile cells for flex alignment, labels, long titles, badges, checkboxes, and custom action buttons.
Diagnostic table
Use this table to keep the work practical. It connects the symptom to evidence and a verification step.
| Action | Evidence to collect | How to verify |
| Find semantic selectors | Search owned code for `th.check-column`, `th input`, `td.title`, `td.column-title`, `td.column-primary`, `.row-title`, `.post-state`, and `.row-actions`. | Checkboxes and bulk actions work for permitted rows. |
| Capture old and new markup | Capture list-table markup on WordPress 7.0.2 and 7.1 for posts, pages, and each owned custom post type. | Titles, states, and row actions render and respond under both `td` and `th` markup. |
| Target stable classes | Test editable, non-editable, private, draft, scheduled, trashed, and password-protected rows so conditional controls are covered. | Custom post types retain sortable columns and delegated events. |
| Retest actions and permissions | Run bulk selection, quick edit, row action, sortable column, keyboard navigation, and delegated JavaScript listener tests. | Screen readers announce the post title as the row header and mobile controls do not overlap. |
Test scenarios to run
Run the same controlled fixture across these branches. Record the expected result before the test so a surprising response is visible immediately.
| Scenario | Fixture | Expected result |
| Editable post | Administrator row with checkbox and all actions | Bulk select, title link, and delegated row actions pass |
| Read-only post | Role can view but not edit the record | Title remains the row header without an assumed checkbox |
| Custom post type | Maximum owned columns, badges, and custom action | Selectors work under the new title th and old-version td |
| Responsive table | Long private title at narrow viewport | Flex cells align, labels remain visible, and controls do not overlap |
Why this usually happens
- Element selectors encoded the old table semantics instead of the stable class or action target.
- Conditional permissions can remove the checkbox and change which old assumption fails.
- Responsive flex rules can expose width and alignment bugs that desktop tables hide.
Field notes
- Keep compatibility selectors for both `td` and `th` while supporting pre-7.1 installations.
- Use a custom post type with the maximum number of owned columns.
- Verify the title itself remains the announced row name for screen-reader users.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
/* Compatible across WordPress versions */
.check-column input[type='checkbox'] { inline-size: 1rem; }
:is(td, th).column-title .row-actions { display: flex; gap: .5rem; }
document.addEventListener('click', (event) => {
const action = event.target.closest('.row-actions [data-my-action]');
if (action) runAction(action);
});
Safe fix order
Do the work in a sequence that makes each result easy to prove. Stop if a step produces new evidence that changes the incident scope.
- Find semantic selectors
- Capture old and new markup
- Target stable classes
- Retest actions and permissions
- Verify responsive accessibility
Decision rule
Hold the upgrade when bulk selection, row actions, custom columns, screen-reader row naming, or narrow-screen controls stop working for any supported post type or role.
What to tell the client or owner
Provide the screen, post type, role, old and new markup, failing selector, event target, viewport, expected action, and browser test result.
Production verification checklist
- Checkboxes and bulk actions work for permitted rows.
- Titles, states, and row actions render and respond under both `td` and `th` markup.
- Custom post types retain sortable columns and delegated events.
- Screen readers announce the post title as the row header and mobile controls do not overlap.
Mistakes to avoid
- Do not change Core markup back to the old structure.
- Do not fix CSS without checking JavaScript and browser tests.
- Do not target `th` or `td` when a stable class or data attribute identifies the control.
- Do not test only an administrator with every checkbox visible.
Questions teams ask during testing
Why did WordPress move the row header?
The title names the record consistently, while a selection checkbox can be absent or provide a poor row name.
Can one selector support old and new WordPress versions?
Yes. Prefer the stable class or use `:is(td, th)` where the cell element still matters.
Which screens are affected?
Start with post, page, and custom post type list tables, then test any extension that reuses or imitates their markup.
When HandL WP should help
HandL WP can audit admin selectors, build role and post-type fixtures, correct compatibility rules, and verify actions plus accessibility across WordPress versions.
If this is active on a production site, fix a WordPress 7.1 admin compatibility issue.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references