User Last Login Sort Column

时间:2016-05-31 作者:timmyg

我看到有几种方法可以在用户页面上显示用户的最后登录日期,而不必使用第三方插件。在此基础上,我真的希望用户的最后登录日期列可以排序(希望按日期排序)。

我正在通过使用显示用户上次登录功能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\';

    }

2 个回复
最合适的回答,由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\' );
    } 
}

SO网友:Viktor Borítás

您可以尝试使用\'manage_users_sortable_columns\' 改为筛选句柄。

//Sort the Columns
    add_filter( \'manage_users_sortable_columns\', \'sortable_users_column\' );

    function sortable_users_column( $sortable_columns  ) {
        $sortable_columns[ \'last_login_column\' ] = \'lastlogin\';
    }
这是用户管理屏幕的正确选项。

相关推荐

set a user-meta key as avatar

我有一个名为“meta kay”的用户;阿凡达;;此值包含用户上载的图像的URL。如何将此元值设置为用户化身?我使用此代码,但不工作add_filter( \'get_avatar\', \'slug_get_avatar\', 10, 5 ); function slug_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) { //If is email, try and find user ID