DEV Community

Cover image for The WordPress admin never shows featured images, and the reason is a design decision worth knowing
Lucas Fenwick
Lucas Fenwick

Posted on

The WordPress admin never shows featured images, and the reason is a design decision worth knowing

Show featured images in the WordPress admin post list by enabling Custom Admin Columns in WP Adminify: go to WP Adminify > Productivity, turn on Custom Admin Columns, tick Show Post Thumbnails Column, and a Thumbnail column appears in your Posts list, with an optional default Column Thumbnail Image for posts that have no featured image set. WordPress core has never shown featured images in the Posts list because the featured image is a _thumbnail_id record in postmeta, and the admin list table renders posts-table fields and taxonomy links but never postmeta, so the only built-in way to check featured images is opening posts one by one.

That is the whole answer. The rest of this post is the why, the code route, and the audit trick, because the why is the part every tutorial skips.

The featured image was never in the post

Set a featured image and WordPress stores exactly one thing, a postmeta record:

_thumbnail_id = 42    // one meta row, pointing at an attachment ID
Enter fullscreen mode Exit fullscreen mode

The post itself does not change. The image is a reference living in a side table, read on the frontend by get_the_post_thumbnail() and written by set_post_thumbnail().

Now look at what the admin Posts list renders: title, author, date from the posts table, categories and tags from taxonomy relationships. Postmeta is not on that list. The list table has no column for any meta field, and featured image is a meta field. So the frontend shows the image on every theme card, every share preview reads it for og:image, and the admin, the one screen where you manage the posts, shows nothing.

Why the gap actually costs something

A post with no featured image is not a cosmetic problem:

  • It shares blank or with a random fallback image on Facebook, X and LinkedIn
  • Most themes render it as an empty card in archives and related-post blocks
  • Google Discover favors large images, at least 1200px wide, so the post is effectively out of the Discover pool

And here is the trap: those posts are invisible in exactly the screen where you would catch them. No column, no signal, no audit. The broken posts surface one embarrassing blank share at a time.

The code route: five lines, plus fine print

Adding the column yourself is a filter and an action:

// functions.php: thumbnail column for posts
add_filter('manage_posts_columns', function ($columns) {
    return ['thumb' => 'Thumbnail'] + $columns;
});

add_action('manage_posts_custom_column', function ($column, $post_id) {
    if ($column === 'thumb') {
        echo get_the_post_thumbnail($post_id, [60, 60]);
    }
}, 10, 2);
Enter fullscreen mode Exit fullscreen mode

The hook reference is manage_{$post_type}_posts_columns. The fine print is where the snippet stops being five lines:

  • Pages need manage_pages_columns and manage_pages_custom_column, separately
  • Every custom post type needs its own manage_{$post_type}_posts_columns filter if you want per-type control
  • A post with no featured image renders an empty cell, no fallback, so the audit signal is a blank you can miss
  • Column width needs a dab of admin CSS or the thumbnail column grabs whatever space it likes
  • It lives in functions.php, which means it dies on theme switch unless you move it to a must-use plugin

The checkbox route

I did this run with WP Adminify's Productivity module. What changed after enabling Custom Admin Columns and ticking Show Post Thumbnails Column:

  • A thumbnail column appeared on the Posts and Pages lists, no code, survives theme switches
  • The same settings screen offers a Column Thumbnail Image, a default image shown for any post with no featured image, and that default is the audit trick: every row showing it is a post that will share blank, so the gaps mark themselves on one scroll
  • It ships beside the other list-screen columns in the same panel, post and page ID columns, a last-login column for users, taxonomy IDs, the small stuff you otherwise snippet in one at a time, all documented on the Custom Admin Columns docs page
  • If you outgrow the checkbox, the standalone Admin Columns Editor builds columns for arbitrary fields, and this list of necessary admin columns for WordPress is a decent map of which ones earn their width
  • It sits in the wider Productivity toolset, and pairs naturally with the replace-image-without-changing-URL workflow once the column has shown you which images need swapping

The caveat I will not skip: the column adds one thumbnail request per row. WordPress serves the small registered thumbnail size so it is minor, but a 200-row list on slow hosting will feel it. And the default image marks a missing featured image, it does not set one, the post still shares blank until you fix it. The column finds the work. It does not do the work.

Short demo
Docs: Show Post Thumbnails Column in WP Adminify

So: do you run a thumbnail column, snippet it per post type, or audit featured images the hard way, one edit screen at a time?

Top comments (0)