WordPress content list customization

Choose exactly what shows in every content list

Custom Content Columns lets you pick, rename, resize, reorder and sort the columns in any post type's list, the media library, taxonomies or the Users screen.

  • Drag columns between Available and Active panels.
  • Rename any column with a custom label.
  • Set a fixed width in px, %, em, rem, vw or vh.
  • Add a custom column pulled from post meta, user meta or term meta.
Content List EditorCustom Content Columns
Available
Excerpt
Parent
Active+ Add custom
Author150px
Title20%
3 columns activeApplied to the Posts list instantly.
Saved
Quick answer

What does Custom Content Columns do?

When the custom_content_columns module is active, TOWP_Custom_Content_Columns filters the manage_{type}_posts_columns hook, and its taxonomy and Users equivalents, for every enabled content type, replacing WordPress's default column set with a saved configuration: which columns show, in what order, under what label and at what width. A "Columns" link appears in each enabled type's submenu, alongside a badge on the list screen itself, opening a dedicated manager with drag-and-drop Available and Active panels. Because columns added by other plugins appear in the Available panel alongside WordPress's own, a screen crowded by third-party additions can be trimmed to just what's actually useful.

The "too many columns" problem

Every plugin adds a column, nobody removes one

A list screen accumulates columns the way an inbox accumulates subscriptions: one addition at a time, with no obvious moment to clean up.

List screens accumulate columns from every plugin

Each active plugin that touches a post type tends to add its own column, and over time a list screen fills with fields nobody actually reads.

WordPress's built-in column toggle is all-or-nothing

The Screen Options panel can hide a column, but it can't rename one, resize one, reorder them, or pull in a custom field as a new column.

A dedicated WordPress solution

A real column editor, not just a hide toggle

The module turns each content list into something you actively design: which columns show, what they're called, how wide they are, and in what order.

Drag columns in and out

Move any column, WordPress's own or one added by another plugin, between the Available and Active panels with drag and drop.

Rename, resize and reorder

Give any active column a custom label, a fixed width, and a position, independent of how the underlying plugin registered it.

Pull in a custom field as a column

Add a column sourced directly from post meta, user meta or term meta, with its own label and optional date formatting.

Verified feature set

Precise control over every list screen

Every capability below is present in the supplied PHP class, its AJAX handlers and settings registration.

Layout

Drag-and-drop Available/Active panels

A dedicated manager screen lists every available column on one side and the active, ordered set on the other.

Drag and dropTwo-panel manager
Custom columns

Post meta, user meta and term meta

A custom column can pull its value directly from a meta field, with an optional date format for date-like values.

postmeta_usermeta_, termmeta_
Sizing

A validated width, in six units

Column width accepts px, %, em, rem, vw or vh, validated against a strict pattern before being saved.

6 unitsRegex-validated
Sorting

Sortable columns that actually sort

A column marked sortable hooks into the query itself, so sorting by a meta column produces a genuinely sorted list, not just a label.

pre_get_postsMeta sorting
Table behaviour

Sticky header, freeze columns, scroll control

Per-type table options control a sticky header row, how many left-hand columns stay frozen while scrolling, and whether horizontal scroll is disabled.

Sticky headerFrozen columns
Practical use cases

Where a rebuilt column set helps most

The module supports every list screen that's grown more crowded than useful.

Sites cluttered by plugin columns

Trim a Products or Orders list crowded with columns from several plugins down to the handful anyone actually reads.

Surfacing a useful meta field

Turn a post meta field, like an expiration date or an external reference number, into its own sortable column.

A more useful Users list

Add columns like last login or registration date directly to the Users screen instead of opening each profile individually.

Operational benefits

Lists that show what people actually read

The module combines drag-and-drop editing, custom meta columns and genuine sortability in one manager.

Every list shows only what mattersTrimming a column set to the fields people actually read turns a cluttered list into a working tool.
Sort by what's actually usefulMaking a meta field sortable turns a static column into something the list can be ordered by.
Consistent across content typesThe same manager and the same controls apply whether it's a post type, a taxonomy, media, or the Users list.
Works alongside other plugins' columnsThird-party columns show up in the same panel as WordPress's own, so nothing needs a separate settings screen to be managed.
Performance behaviour

Filters scoped to what's actually configured

The verified implementation only adds filtering where a saved configuration exists.

Only enabled types are filtered

Column filters only get registered for the post types, taxonomies and lists explicitly enabled in settings.

Two small, dedicated options

Column configuration and table behaviour settings each live in their own non-autoloaded option, separate from general plugin settings.

No extra queries for unsaved types

A content type with no saved column configuration is left completely untouched, with no added filtering or overhead.

Security implementation

Validated field by field, bounded by design

The code restricts management to administrators and validates every saved value individually.

01

Administrator-only management

The manager screen and every AJAX action require the manage_options capability.

02

Nonce-verified saves

Saving columns, saving table options, and resetting all call check_ajax_referer() before processing anything.

03

Field-by-field sanitization

Every saved column's key, label, width and date format passes through WordPress's own sanitization functions individually.

04

Bounded payload size

A save request larger than 100,000 characters gets rejected outright, guarding against an oversized or malformed payload.

Verified compatibility

Built around native WordPress list-table hooks

The supplied code integrates through APIs present in WordPress core. No compatibility claim beyond the verified implementation is assumed.

Column hooks

manage_{type}_posts_columns

Integrates through the standard WordPress column filters for post types, media, taxonomies and Users, the same hooks any plugin uses to add a column.

manage_posts_columnsmanage_users_columns
Sorting

pre_get_posts and friends

Meta-based sorting hooks into pre_get_posts, pre_get_users and parse_term_query, so a sortable meta column genuinely reorders the list.

pre_get_postspre_get_users
Third-party columns

Discovered, not replaced

Columns registered by other plugins get discovered and listed as Available, not overwritten, so nothing from another plugin gets lost.

Column discoveryNo conflicts
Solution comparison

TheOneWP versus common alternatives

Compare the verified Custom Content Columns implementation with WordPress's own built-in Screen Options.

CapabilityTheOneWP Custom Content ColumnsOther common solutions
Hiding a column Move it out of Active with drag and dropWordPress's Screen Options can hide one, nothing more
Renaming a column A custom label per columnNot possible without editing plugin code
Resizing a column A validated width in six possible unitsNot available at all through core
Custom meta columns Add one sourced from post, user or term metaUsually requires a code snippet per field
Administration One manager screen per content type, reached from its own submenuScreen Options only, with no deep customization
Recommended workflow

Rebuild a column set in four steps

Start with the type that's grown the most cluttered, and work through the others as needed.

01

Enable Custom Content Columns

Activate the module from the TheOneWP Content settings tab and choose which post types, taxonomies and lists to manage.

02

Open the Columns manager

Use the "Columns" link in a type's submenu, or the badge on its list screen, to open the two-panel manager.

03

Move, rename and resize columns

Drag columns between Available and Active, set a custom label and width, and add a custom meta column if needed.

04

Save and adjust table behaviour

Save the column configuration, then set sticky header, frozen columns or scroll behaviour if the list needs it.

Best practices

Design lists around what people ask

A well-tuned column set answers the questions people actually have about that list.

01

Start by removing, not adding

Trimming an over-crowded list to the columns people actually read usually helps more than adding new ones.

02

Only mark a column sortable if it should be

Sorting works properly on the columns it's enabled for; leave it off for columns that don't have a meaningful order.

03

Use meta columns for genuinely useful fields

A custom meta column earns its place when it answers a question people ask about that list regularly.

04

Revisit column configuration after adding a plugin

A newly installed plugin's columns show up in Available; decide deliberately whether they belong in Active.

Common mistakes

Avoid assumptions that cause confusion

The module has a defined behaviour around hiding, sorting and width that's easy to misread.

Assuming a hidden column is deleted

Moving a column out of Active only hides it from the list; it stays available to add back at any time.

Expecting every column to be sortable automatically

A column only sorts the list if it's explicitly marked sortable in its configuration.

Setting a width in the wrong format

A width has to match one of six accepted units exactly, like 150px or 20%; anything else is rejected and saved as unset.

Frequently asked questions

Custom Content Columns FAQ

These answers come directly from the verified class, its AJAX handlers and settings registration.

What does Custom Content Columns do?

It lets you choose, rename, resize, reorder and sort the columns shown in any enabled post type's list, the media library, taxonomies or the Users screen.

Can I add a column from custom fields?

Yes. A custom column can pull its value from post meta, user meta or term meta, with an optional date format.

Does this replace columns added by other plugins?

No. Third-party columns get discovered and listed in the Available panel alongside WordPress's own, ready to be managed the same way.

Can I set an exact width for a column?

Yes. Width accepts px, %, em, rem, vw or vh, validated against a strict pattern before being saved.

Can a custom meta column actually be sorted?

Yes, if marked sortable. Meta-based sorting hooks into the underlying query, so sorting genuinely reorders the list rather than just labeling a column.

Where do I find the columns manager for a specific post type?

From a "Columns" link added to that type's submenu, or from a badge shown directly on its list screen.

What happens to a column I move out of Active?

It moves back to the Available panel; nothing is deleted, and it can be re-added at any time.

Can I control table behaviour like a sticky header?

Yes. Per-type options control a sticky header row, how many columns stay frozen while scrolling, and whether horizontal scroll is disabled.

Who can change column configuration?

Only an administrator with access to TheOneWP settings; every save action also requires a verified nonce.

Is there a way to reset a type's columns back to default?

Yes. A reset action removes the saved configuration for a type, or for every type at once, restoring WordPress's original columns.

Stop scrolling past columns nobody reads.Design the list that actually helps.

Use Custom Content Columns to choose, rename, resize and sort exactly the columns each content list needs.