# WP Last Login

Contributors: obenland
Tags: admin, user, login, last login, login date
Donate link: <https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K32M878XHREQC>
Requires at least: 6.5
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 7
License: GPLv2 or later
License URI: <https://www.gnu.org/licenses/gpl-2.0.html>

Adds a sortable "Last Login" column to the Users screen — spot inactive accounts and see who's actually using your site.

## Description

**WP Last Login** records when each user signs in and surfaces it as a sortable column on the Users screen — so you can see who's active, identify dormant accounts, and confirm that real people are coming back.

### Features

* Sortable "Last Login" column on the Users screen, including the network admin user list on multisite.
* Hover any date to reveal the exact login time.
* Captures logins via the standard `wp_login` action, so it works with any login flow that triggers it — including the [Two Factor](https://wordpress.org/plugins/two-factor/) plugin, WooCommerce, BuddyBoss, and most social-login plugins.
* Users without a recorded login show a neutral em-dash (—) — never a misleading "never" — and still sort correctly when ordered by last login.
* Lightweight: one user meta key, no settings page, no extra database tables.
* Filter hooks let you customize the date format or hide the column from non-admin roles.


## Installation

1. Download WP Last Login.
2. Unzip the folder into the `/wp-content/plugins/` directory.
3. Activate the plugin through the 'Plugins' menu in WordPress.


## Frequently Asked Questions

### Why does the column show an em-dash (—) for all my users?

The plugin records a login when a user signs in *after* it's been activated. WordPress doesn't store historical login data, so existing accounts will start populating their "Last Login" the next time each user logs in. Hovering the dash shows a tooltip explaining the same.

### How do I change the date format or show the time?

The date follows your site's general date format (Settings → General); the exact time appears on hover. To override the date format, use the `wpll_date_format` filter:

    add_filter( 'wpll_date_format', function() {
        return 'Y-m-d H:i';
    } );

### How do I hide the column from non-admin users?

Filter `wpll_current_user_can` and return a capability check. Login tracking still happens — only column visibility is gated:

    add_filter( 'wpll_current_user_can', function() {
        return current_user_can( 'manage_options' );
    } );

### Does it work with multisite, Two Factor, WooCommerce, BuddyBoss, or social login plugins?

Yes. The plugin hooks into WordPress's standard `wp_login` action, so any login method that triggers it is captured. The Two Factor plugin (which interrupts `wp_login`) is supported via a dedicated hook.

### What happens to my data if I deactivate the plugin?

Deactivating leaves stored login timestamps intact, so reactivating preserves history. Uninstalling (deleting the plugin entirely) removes all of the plugin's user meta.


## Screenshots

1. Last login column in the user table.


## Changelog

### 7

* Added compatibility with Two Factor plugin. Props @bkno.
* Improved date display to display login time on hover.

### 6

* Revamped file structure to remove unnecessary files.
* Fixed a bug where login dates were overwritten on plugin reactivation. Props @richardbuff.

### 5

* Improved uninstall routine (no longer queries all users).
* Updated utility class.
* Tested with WordPress 6.1.

### 4

* Improved date display to account for the timezone of the site. Props @knutsp.

### 3

* Fixed a bug where users who haven't logged in disappear from user lists when ordering by last login. See <https://wordpress.org/support/topic/new-users-dont-get-the-meta-field/>

### 2

* Maintenance release.
* Updated code to adhere to WordPress Coding Standards.
* Tested with WordPress 5.0.

### 1.4.0

* Fixed a long standing bug, where sorting users by last login didn't work.
* Tested with WordPress 4.3.

### 1.3.0

* Maintenance release.
* Tested with WordPress 4.0.

### 1.2.1

* Reverts changes to wp_login() as the second argument seems not to be set at all times.

### 1.2.0

* Users are now sortable by last login!
* Updated utility class.
* Added Danish translation. Props thomasclausen.

### 1.1.2

* Fixed a bug where content of other custom columns were not displayed.

### 1.1.1

* Updated utility class.

### 1.1.0

* Made the display of the column filterable.
* Widened the column a bit to accommodate for large date strings.

### 1.0

* Initial Release.


## Upgrade Notice


## Plugin Filter Hooks

**wpll_current_user_can** (*boolean*)
> Whether the column is supposed to be shown.
> Default: true


**wpll_date_format** (*string*)
> The date format string for the date output.
