我看到有几种方法可以在用户页面上显示用户的最后登录日期,而不必使用第三方插件。在此基础上,我真的希望用户的最后登录日期列可以排序(希望按日期排序)。
我正在通过使用显示用户上次登录功能wpdailybits, 但我添加的代码无法对列进行排序。
建议?我知道我错过了什么。。。
//Capture User Last Login
add_action(\'wp_login\',\'wpdb_capture_user_last_login\', 10, 2);
function wpdb_capture_user_last_login($user_login, $user){
update_user_meta($user->ID, \'last_login\', current_time(\'mysql\'));
}
//Display Last Login Date in Admin
add_filter( \'manage_users_columns\', \'wpdb_user_last_login_column\');
function wpdb_user_last_login_column($columns){
$columns[\'lastlogin\'] = __(\'Last Login\', \'lastlogin\');
return $columns;
}
add_action( \'manage_users_custom_column\', \'wpdb_add_user_last_login_column\', 10, 3);
function wpdb_add_user_last_login_column($value, $column_name, $user_id ) {
if ( \'lastlogin\' != $column_name )
return $value;
return get_user_last_login($user_id,false);
}
function get_user_last_login($user_id,$echo = true){
$date_format = get_option(\'date_format\') . \' \' . get_option(\'time_format\');
$last_login = get_user_meta($user_id, \'last_login\', true);
$login_time = \'Never logged in\';
if(!empty($last_login)){
if(is_array($last_login)){
$login_time = mysql2date($date_format, array_pop($last_login), false);
}
else{
$login_time = mysql2date($date_format, $last_login, false);
}
}
if($echo){
echo $login_time;
}
else{
return $login_time;
}
}
//Sort the Columns
add_filter( \'manage_edit-users_sortable_columns\', \'sortable_users_column\' );
function sortable_users_column( $sortable_columns ) {
$sortable_columns[ \'last_login_column\' ] = \'lastlogin\';
}
最合适的回答,由SO网友:brianjohnhanna 整理而成
我看不到您的代码中有任何地方正在修改查询。只是将列标记为可排序并不意味着它知道如何对数据进行排序,它只会添加一个小的上/下箭头,使列可以单击,但您必须相应地截取查询变量,并告诉WP该怎么做。你会想加入pre_get_users 并相应地修改查询。因为您已经在使用存储时间current_time( \'mysql\' ) 然后,默认排序应该按预期工作。
这是未经测试的,但应该有效或至少让您开始。
add_action( \'pre_get_users\', \'wpse_filter_user_query\' );
function wpse_filter_user_query( $user_query ) {
global $current_screen;
if ( !is_admin() || \'users\' != $current_screen->id )
return;
if( \'lastlogin\' == $user_query->get( \'orderby\' ) )
{
$user_query->set( \'orderby\', \'meta_value\' );
$user_query->set( \'meta_key\', \'last_login\' );
}
}