Skip to content
GPLWP Guides

How to customize admin columns in WordPress

Utilities Time About 20–40 minutes 7 steps Updated 4 Sep 2026

UTILITIES
The short answer

Use Screen Options to hide or show existing columns. To add custom fields, taxonomies, user data, sorting, or filtering, you need code using WordPress list-table hooks or an admin-columns plugin. The manual route is fine for one simple column; a plugin is faster for several content types.

The route
  1. 01Decide what the column must show
  2. 02Use Screen Options for simple changes
  3. 03Add a custom column with code
  4. 04Show taxonomies and user data safely
  5. 05Make the column sortable
  6. 06Check the table on every screen size
  7. 07Use a plugin for the fast route

What you need

  • Administrator access to WordPress
  • A backup or staging site for code changes
  • The custom field, taxonomy, or user data you want to display

Decide what the column must show

First decide whether you only need to hide existing columns, add a value that already exists, or make a custom field sortable and filterable. WordPress handles the first task in the admin; the other tasks require code or a plugin.

Write down the target screen, such as Posts, Pages, a custom post type, Users, Media, or Comments. A column hook is tied to a particular list table, so code for Posts will not automatically appear on a custom post type screen.

Use Screen Options for simple changes

Open the relevant list screen, such as Posts or Pages, then open Screen Options in the top-right corner. Tick the columns you want and clear the ones you do not want, then select Apply. You can also change how many records appear per page.

This is the right manual route when the column already exists. The setting is screen-specific and may be stored per user, so changing it for one administrator does not necessarily change what other users see. Loading too many rows can also make the admin table slower.

Add a custom column with code

Put site-specific code in a small custom plugin or a child theme rather than editing a parent theme. For a custom post type called book, add a column with the post-type columns filter and print its value with the matching custom-column action:

add_filter( 'manage_book_posts_columns', function( $columns ) { $columns['publisher'] = 'Publisher'; return $columns; } ); add_action( 'manage_book_posts_custom_column', function( $column, $post_id ) { if ( 'publisher' === $column ) { echo esc_html( get_post_meta( $post_id, 'publisher', true ) ); } }, 10, 2 );

Replace book with the registered post-type key and publisher with the custom-field key. Use manage_posts_columns and manage_posts_custom_column for the standard Posts screen, or the page-specific equivalents for Pages. WordPress documents these hooks as the pair used to register and render custom post-list columns.

Show taxonomies and user data safely

For a taxonomy column, register the column as above and use a taxonomy function such as get_the_term_list() when rendering it. Escape plain text with esc_html(); if you deliberately output generated term links, make sure the returned markup is safe and appropriate for the admin screen.

User tables use different hooks, including manage_users_columns for the headings and manage_users_custom_column for the values. Media also has its own column hooks. Do not copy a post-column hook into the Users or Media screen and expect it to run.

Make the column sortable

Adding a value does not make it sortable. For the book example, register the column on the edit-book screen:

add_filter( 'manage_edit-book_sortable_columns', function( $columns ) { $columns['publisher'] = 'publisher'; return $columns; } );

If the value is stored in post meta, you must also alter the admin query when that column is selected, usually by checking the admin screen and the query's orderby value in pre_get_posts, then setting meta_key and orderby to the correct values. This is where many snippets fail: the heading becomes clickable, but the rows stay in date order because the query was never changed. WordPress's sortable-column filter only registers the sortable screen column; it does not perform the database ordering for custom data.

Check the table on every screen size

Reload the list table, test pagination, and verify the column for users with different roles. Check empty values, long text, missing terms, and records with no custom field saved. A PHP notice or unescaped output can affect the whole admin table.

Keep the number of columns reasonable. On narrow screens, WordPress applies responsive list-table behaviour around the primary column. If you move or add a column at the front, the layout can become confusing unless the intended primary column is handled correctly. Also check for conflicts with custom post-type, WooCommerce, or field-management plugins that add their own columns.

Use a plugin for the fast route

If you need columns for several post types, custom fields, taxonomies, users, images, or WooCommerce data, use MB Admin Columns instead of maintaining several code snippets. Configure the list screen, choose the data source, arrange the columns, and enable sorting or filtering where supported.

The manual route remains perfectly suitable for one small, stable column. The plugin route is faster when non-developers need to adjust layouts, when you need sortable custom-field data, or when the same site has several admin tables to manage.

The fast route

Let MB Admin Columns do it

Adds sortable custom-field, taxonomy, and user data columns to admin lists for faster content management.

Get MB Admin Columns

Sources

  1. wordpress.com /support/customize-your-administration-screens/?utm_source=o…
  2. developer.wordpress.org /reference/hooks/manage_posts_columns/?utm_source=openai
  3. developer.wordpress.org /reference/hooks/manage_screen-id_columns/?utm_source=openai
  4. developer.wordpress.org /reference/hooks/manage_this-screen-id_sortable_columns/?utm…

Questions

Can I hide WordPress admin columns without a plugin?
Yes, you can hide existing columns without a plugin by opening Screen Options on the relevant admin list screen, clearing the columns you do not need, and selecting Apply. This preference is tied to that screen and may be specific to your user account, so it is not always a site-wide layout change for every administrator.
How do I add a custom-field column to Posts?
Add the column with the manage_posts_columns filter and output its value with the manage_posts_custom_column action. In the rendering callback, check the column ID and retrieve the value with get_post_meta(), then escape plain text before printing it. For a custom post type, use the post-type-specific versions of those hooks instead.
Why is my custom admin column empty?
A custom admin column is usually empty because its rendering hook does not match the screen or because the custom-field key is wrong. Confirm the registered post-type key, column ID, field name, and callback arguments. Pages and hierarchical post types can use different column hooks, and Users and Media have their own list-table hooks.
How do I make a custom WordPress column sortable?
Register the column with the screen's sortable-columns filter, then change the admin query when that column is selected. For post-meta values, the query normally needs the matching meta key and an appropriate orderby value. Registering the clickable heading alone does not tell WordPress how to sort the stored data.
Is a plugin better than custom code for admin columns?
A plugin is better when you need several columns, multiple post types, sortable or filterable custom data, drag-and-drop ordering, or settings that editors can change without PHP access. Custom code is fine for one simple, stable value and avoids adding another settings interface, but it needs maintenance when field names or plugins change.