My first answer was completely off-mark and I’m completely rewriting it…
But thanks to Milo’s hint, I found the solution here:
http://wordpress.mcdspot.com/2011/05/24/search-admin-user-list-on-first-and-last-names/
After adapting it, this works for me with ‘facebook’ and ‘twitter’ author_meta
.
add_action('pre_user_query','wpse_27518_pre_user_query');
function wpse_27518_pre_user_query($user_search) {
global $wpdb,$current_screen;
if ( 'users' != $current_screen->id )
return;
$vars = $user_search->query_vars;
if('facebook' == $vars['orderby'])
{
$user_search->query_from .= " INNER JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='facebook')";
$user_search->query_orderby = ' ORDER BY UPPER(m1.meta_value) '. $vars['order'];
}
elseif ('twitter' == $vars['orderby'])
{
$user_search->query_from .= " INNER JOIN {$wpdb->usermeta} m1 ON {$wpdb->users}.ID=m1.user_id AND (m1.meta_key='twitter')";
$user_search->query_orderby = ' ORDER BY UPPER(m1.meta_value) '. $vars['order'];
}
}