add_filter( 'query', 'mycustom_query_alter' );
function mycustom_query_alter( $query ) {
global $wpdb;
// Try to go into HyperDB settings to find DB name of shared users DB
// The dataset is named "users"
if (!empty($wpdb->hyper_servers['users'])) {
if (!empty($wpdb->hyper_servers['users']['read'][1][0]['name'])) {
$users_db = $wpdb->hyper_servers['users']['read'][1][0]['name'];
}
else {
// We didn't find a users table in HyperDB, so we'll default to a standard one
$users_db = 'wp_users';
}
// If the query references both $wpdb->users and $wpdb->usermeta tables, prefix the users table with correct database name
if (FALSE !== strpos($query, $wpdb->users) &&
FALSE !== strpos($query, $wpdb->usermeta)) {
$query = str_replace($wpdb->users, $users_db . '.' . $wpdb->users, $query);
}
}
return $query;
}