How to show the user registration date in WordPress

View as Markdown

WordPress stores the date every account was created and never shows it. Where it lives, how to add a sortable Registered column to the Users screen, and what the date can and cannot tell you.

Open Users → All Users on any WordPress site and you get five columns: Username, Name, Email, Role and Posts. What you don’t get is the answer to the question you usually came with: when did this account appear? The WordPress user registration date exists for every account on your site. WordPress has recorded it since the beginning. It just never puts it on the screen.

This guide covers where the date lives, three ways to show it, and how to read it once it’s there.

WordPress already stores the date

The date is not user meta and no plugin has to collect it. It is a column in the wp_users table called user_registered, and WordPress fills it in itself. When wp_insert_user() creates an account it sets user_registered to the current time in UTC, unless the caller hands it a different value.

That one function is behind every route an account can arrive by:

So the date is already there for every existing user, including accounts created years before you went looking. Anything that shows it is reading, not recording.

Multisite makes the omission stranger. The Network Admin → Users screen has had a sortable Registered column for years. The single-site Users screen, the one almost everybody uses, has not.

Option 1: look it up in the database

If you need the date for one account, right now, a query does it:

SELECT user_login, user_email, user_registered
FROM wp_users
ORDER BY user_registered DESC
LIMIT 20;

Run it in phpMyAdmin or Adminer, or through WP-CLI:

wp user list --fields=ID,user_login,user_registered --orderby=registered --order=DESC

Your table prefix may not be wp_. The times you get back are UTC, not your site’s timezone, which matters when you are lining an account up against an order or a log entry.

This is fine once. It is not something you want to do every time a strange name shows up in the list.

Option 2: add the column with code

The Users screen has three hooks for this: one adds the column, one fills the cell, one makes it sortable. In a small plugin or your theme’s functions.php:

add_filter( 'manage_users_columns', function ( $columns ) {
	$columns['registered'] = 'Registered';
	return $columns;
} );

add_filter( 'manage_users_custom_column', function ( $output, $column, $user_id ) {
	if ( 'registered' !== $column ) {
		return $output;
	}

	$user = get_userdata( $user_id );

	return esc_html( wp_date( get_option( 'date_format' ), strtotime( $user->user_registered . ' UTC' ) ) );
}, 10, 3 );

add_filter( 'manage_users_sortable_columns', function ( $sortable ) {
	$sortable['registered'] = array( 'registered', true );
	return $sortable;
} );

Two details are easy to get wrong:

If the code lives in your theme, the column disappears when you switch themes. A small must-use plugin avoids that.

Option 3: switch it on in Adminkeep

Adminkeep is a free plugin, and User Registration Date is one switch in it, under the Admin group. Turn it on and the Users screen gets a Registered column:

It stores nothing. The column reads the date WordPress already has, so it is correct for every existing user the moment you switch it on, and switching it off leaves nothing behind. Like every Adminkeep feature, it adds no code to your site while it is off.

What the date is good for

Spotting spam signups. Sort newest first. A wave of bot registrations is unmistakable: dozens of accounts created minutes apart, usually with throwaway email domains. That is your cue to stop spam user registrations at the source rather than deleting accounts every week.

Finding an account that should not exist. After a security scare, an administrator created last Tuesday at 3 am is the first thing to look for. The Role filter plus the Registered sort gets you there in two clicks.

Support and customer questions. “How long has this customer been with us?” and “was this account created before or after the price change?” stop needing a database query.

Cleaning up. Old subscriber accounts from a newsletter experiment or a closed membership are easy to find when you can sort by age.

What the date cannot tell you

It is the date the account was created, not the last time anyone used it. WordPress does not record logins at all, so an account registered in 2019 could have logged in this morning or never. Don’t delete accounts on age alone.

The date can also be supplied by whatever created the account. Migration and import tools often carry the original date across from the old site, which is what you want, and occasionally write an empty one, which is why a good column shows a dash rather than a year that never happened.

Frequently asked questions

Does WordPress store the user registration date automatically?

Yes. Every account gets a user_registered value in the wp_users table at the moment it is created, set by WordPress core in UTC. No plugin is involved.

Why doesn’t WordPress show it on the Users screen?

There is no technical reason. The single-site Users table has a short, fixed list of columns and the registration date was never one of them, even though the multisite network Users screen shows it.

Can I sort users by registration date?

Yes. WordPress’s user query supports ordering by registered. A column that declares itself sortable with that key gets a clickable heading, and wp user list --orderby=registered does the same from the command line.

Will a registration date plugin have dates for my existing users?

If it reads core’s user_registered column, yes, for every account. Be wary of any plugin that starts recording dates itself from the day you install it: the data was already there.

Is the registration date the same as the last login?

No. WordPress stores when an account was created and nothing about when it was last used. Last login has to be recorded by a plugin from the day it is installed, so it never covers the past.

Install it, lock it, forget it.

A free WordPress plugin — GPL, instantly reversible, and updates come to you.

Type to search the whole site.