You can customize WordPress admin lists without a plugin: use Screen Options for personal display preferences, and PHP hooks when you need code-defined columns or filter controls. A custom dropdown is only the interface; to narrow the list, your implementation must also apply the submitted value to the admin query.
Choose the right approach for the change
Start by deciding whether you want to change what you see, what every user sees, or which records appear. Those are separate jobs in WordPress.
| Goal | Mechanism | Scope and effect |
|---|---|---|
| Hide or show an existing column, or change items per page | Screen Options | Display preference for an individual user on a supported screen; does not change which records match. |
| Add or remove a column on a post list | manage_posts_columns, manage_pages_columns, or a post-type-specific columns filter |
Code-defined column headings for the relevant post list. |
| Put a custom dropdown or other control above the list | restrict_manage_posts |
Adds interface controls to Posts and Pages list-table navigation; does not itself filter results. |
| Customize columns for one admin list-table screen | manage_{$screen->id}_columns |
Targets a particular screen ID rather than a broader post-type list. |
| Make a column sortable | That list table’s sortable-column extension point | Sorting is separate from defining or displaying a column. |
Use Screen Options for personal display changes
On supported administration screens, open Screen Options to choose which available fields or modules appear. On the Posts screen, WordPress documents options for showing or hiding columns and setting the number of posts per page; the Pages screen offers the same kind of controls for pages. See the official Posts Screen, Pages Screen, and Administration Screens documentation.
This is the simplest option when you only want to adjust your own view. Screen Options do not add a new column, create a custom filter, or change the query that determines which records WordPress returns.
#1 Best Overall
Add or remove columns with post-list hooks
The manage_posts_columns filter changes the column-heading array for the general Posts list. For Pages, use manage_pages_columns; for a custom post type, core provides the dynamic manage_{$post_type}_posts_columns filter. The appropriate hook depends on the list you are customizing, so avoid using a broad hook when the change is meant for only one type.
For example, a custom post type with the slug book can add an ISBN heading like this:
Rank #2
add_filter( 'manage_book_posts_columns', function ( $columns ) {
$columns['isbn'] = __( 'ISBN', 'textdomain' );
return $columns;
} );
This defines a column heading; displaying a value in each row is a separate part of the implementation. Check the hook reference for the WordPress version you support, because hook behavior and parameters can vary by version.
Add a filter control above Posts or Pages
The restrict_manage_posts action fires before the Filter button on the Posts and Pages list tables. It receives context including the post type and whether the controls are being rendered above or below the table. Use it to render a taxonomy dropdown, author selector, status choice, or custom meta-value control.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #3
A complete filter needs both a control and query handling:
- Render a named control. Output the dropdown or other input from
restrict_manage_posts, using a name your query-handling code can recognize. - Read and validate the submitted value. Treat request data as untrusted. Sanitize it and verify that the current user is allowed to perform the relevant administration action.
- Apply the value to the admin query. Add the matching taxonomy, metadata, or date constraint to the list query. The control hook only supplies an insertion point for the interface; it does not filter records automatically.
- Keep the behavior scoped. Check the relevant post type and screen context so the control and query modification do not affect unrelated admin lists.
WordPress core invokes this action while building the list-table navigation and renders the Filter button when extra navigation markup is present. The hook reference describes its placement and parameters; it is not, by itself, a complete implementation for validating values or modifying a query.
Rank #4
Target one specific list-table screen
When a post-type-level change would affect too many screens—or when you are working with a plugin’s own list table—use the dynamic manage_{$screen->id}_columns filter. Core’s Worth InstallingCrashes, No Sound, or Screen Glitches?
Outbyte Driver Updater · freeRandom freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Find the Right Drivers →

