To show a featured-image thumbnail beside each item in a WordPress admin list, register a custom column and then fill that column with the post’s thumbnail. The hooks depend on whether you are editing Posts, Pages, or a custom post type, and the post type must support featured images (thumbnail support).
How the admin column works
WordPress separates a list-table column into two operations:
- Register the column: a columns filter adds a unique key and its heading.
- Render each cell: a custom-column action outputs the value for that key on every row.
The standard Posts action, manage_posts_custom_column, fires for each custom column in the Posts list table. Pages and custom post types use their own hooks.
Before adding code
- Use a child theme, a site-specific plugin, or another code location that survives theme changes. Do not put permanent customizations in a parent theme’s files.
- Confirm that the target post type supports
thumbnail(featured images). Add support in the post-type registration or withadd_theme_support( 'post-thumbnails' )where appropriate. - Choose a small image size such as
thumbnailso the list table remains usable.
Add a thumbnail column to Posts
Place this code in a site-specific plugin or your child theme’s functions.php. It adds a column named featured_image to the standard Posts screen and renders the featured image in each matching cell.
Free tools Windows power users keep installed
One-click scans. No signup required.
#1 Best Overall
<?php
/**
* Add a Featured Image column to the Posts list table.
*/
function itg_posts_columns( $columns ) {
$new_columns = array();
foreach ( $columns as $key => $label ) {
$new_columns[ $key ] = $label;
// Insert the thumbnail after the title column.
if ( 'title' === $key ) {
$new_columns['featured_image'] = __( 'Featured image', 'itg' );
}
}
return $new_columns;
}
add_filter( 'manage_posts_columns', 'itg_posts_columns' );
/**
* Render the Featured Image cell for each Posts row.
*/
function itg_posts_custom_column( $column, $post_id ) {
if ( 'featured_image' !== $column ) {
return;
}
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( ! $thumbnail_id ) {
echo '—';
return;
}
$image = wp_get_attachment_image(
$thumbnail_id,
'thumbnail',
false,
array(
'alt' => '',
'style' => 'width:60px;height:60px;object-fit:cover;',
)
);
echo $image ? $image : '—';
}
add_action( 'manage_posts_custom_column', 'itg_posts_custom_column', 10, 2 );
The callback checks the column key before doing anything, so other columns are left untouched. Rows without a featured image display an em dash rather than an empty cell.
Add the column to Pages
Pages use the page-specific filter and action. Replace the Posts hooks with manage_pages_columns and manage_pages_custom_column:
Rank #2
<?php
function itg_pages_columns( $columns ) {
$columns['featured_image'] = __( 'Featured image', 'itg' );
return $columns;
}
add_filter( 'manage_pages_columns', 'itg_pages_columns' );
function itg_pages_custom_column( $column, $post_id ) {
if ( 'featured_image' !== $column ) {
return;
}
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( ! $thumbnail_id ) {
echo '—';
return;
}
echo wp_get_attachment_image(
$thumbnail_id,
'thumbnail',
false,
array(
'alt' => '',
'style' => 'width:60px;height:60px;object-fit:cover;',
)
);
}
add_action( 'manage_pages_custom_column', 'itg_pages_custom_column', 10, 2 );
Add the column to a custom post type
Non-hierarchical custom post type
Substitute the registered post-type name for book in both dynamic hooks below. If your post type is called portfolio, for example, the hooks become manage_portfolio_posts_columns and manage_portfolio_posts_custom_column.
<?php
function itg_book_columns( $columns ) {
$columns['featured_image'] = __( 'Featured image', 'itg' );
return $columns;
}
add_filter( 'manage_book_posts_columns', 'itg_book_columns' );
function itg_book_custom_column( $column, $post_id ) {
if ( 'featured_image' !== $column ) {
return;
}
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( ! $thumbnail_id ) {
echo '—';
return;
}
echo wp_get_attachment_image(
$thumbnail_id,
'thumbnail',
false,
array(
'alt' => '',
'style' => 'width:60px;height:60px;object-fit:cover;',
)
);
}
add_action( 'manage_book_posts_custom_column', 'itg_book_custom_column', 10, 2 );
Hierarchical custom post type
A hierarchical custom post type follows the page-style list-table path. Use manage_pages_columns and manage_pages_custom_column, then limit the callback to your post type so the column is not rendered for unrelated pages:
<?php
function itg_hierarchical_columns( $columns ) {
$screen = get_current_screen();
if ( $screen && 'book' === $screen->post_type ) {
$columns['featured_image'] = __( 'Featured image', 'itg' );
}
return $columns;
}
add_filter( 'manage_pages_columns', 'itg_hierarchical_columns' );
function itg_hierarchical_custom_column( $column, $post_id ) {
if ( 'featured_image' !== $column || 'book' !== get_post_type( $post_id ) ) {
return;
}
$thumbnail_id = get_post_thumbnail_id( $post_id );
if ( ! $thumbnail_id ) {
echo '—';
return;
}
echo wp_get_attachment_image( $thumbnail_id, 'thumbnail', false, array(
'alt' => '',
'style' => 'width:60px;height:60px;object-fit:cover;',
) );
}
add_action( 'manage_pages_custom_column', 'itg_hierarchical_custom_column', 10, 2 );
The important distinction is the post type’s hierarchy, not just its name. A hierarchical custom post type needs the page-style hooks documented for that list-table behavior.
Adjust the column’s position and appearance
Insert it at a specific position
Build a new array, as in the Posts example, when the column must appear after Title or before Date. Appending $columns['featured_image'] is simpler but places it at the end.
Rank #4
Use a different image size
Change 'thumbnail' to another registered image size, such as 'medium'. Larger sources can increase admin-page load, so keep the rendered dimensions small and use an image size appropriate for your media setup.
Add column styling
Inline dimensions keep the example self-contained. For a reusable implementation, enqueue a small admin stylesheet and target the column class generated from your key (for example, .column-featured_image) instead of placing styles in the callback.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Best Value
Troubleshoot a blank or missing thumbnail
- The column heading is missing: verify that the columns filter matches the screen: Posts, Pages, or the exact custom post type name.
- The heading appears but cells are blank: check that each item has a featured image and that the callback tests the same key used when registering the column.
- The code works for Posts but not Pages: use the page hooks;
manage_posts_custom_columnis not a universal hook. - A custom post type does not show images: confirm that its registration and the theme support thumbnails. A post type without thumbnail support cannot provide a featured-image value.
- A hierarchical custom post type behaves differently: use the page-style hooks and restrict the callback by post type.
- Images are broken or oversized: make sure the attachment still exists, request a registered size, and set a modest display width and height.
Code or plugin: which approach fits?
| Approach | Best for | Trade-offs |
|---|---|---|
| Custom hooks | Sites that need precise placement, markup, sizing, or conditional logic. | Requires PHP maintenance and the correct hook for every post type. |
| Featured Image Add in Admin Column plugin | Administrators who prefer settings over maintaining code and want to choose supported post types from the dashboard. | Output and compatibility depend on the plugin and its current WordPress version; review the live WordPress.org listing before installation. |
The WordPress.org listing for Featured Image Add in Admin Column reported version 1.4, fewer than 10 active installations, and testing up to WordPress 6.9.7 when its listing was checked. Those values can change and are not independent compatibility testing, so verify the current listing and test on a staging site before deploying it.
Quick Recap
Recommended implementation checklist
- Identify the exact admin list: Posts, Pages, a non-hierarchical custom post type, or a hierarchical custom post type.
- Register one unique column key and a readable heading.
- Use the matching custom-column action and accept both the column key and post ID.
- Return immediately for other columns.
- Check for a thumbnail ID before rendering an image.
- Use a small registered image size and accessible alternative text handling.
- Test rows with and without featured images, plus the relevant user roles and WordPress version, before enabling the change on production.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

