Skip to content

Instantly share code, notes, and snippets.

@eddiemoya
Created September 7, 2012 23:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save eddiemoya/3670619 to your computer and use it in GitHub Desktop.
Save eddiemoya/3670619 to your computer and use it in GitHub Desktop.
Query building function for getting users by role and taxonomy
function get_user_role_tax_intersection($args = array()){
global $wpdb;
$default_args = array(
'hide_untaxed' => true
'terms' => array(),
'roles' => array('administrator')
);
$args = array_merge($default_args, $args);
$roles = implode("|", $args['roles']);
$query['SELECT'] = array(
'SELECT DISTINCT u.ID, u.user_login, u.user_nicename, u.user_email, u.display_name, m2.meta_value as role, GROUP_CONCAT(DISTINCT m.meta_value) AS terms'
);
$query['JOIN'] = array(
"JOIN wp_usermeta AS m ON u.ID = m.user_id AND m.meta_key = 'um-taxonomy-category'",
"JOIN wp_usermeta AS m2 ON m2.meta_value REGEXP '{$roles}'"
);
$query['GROUP'] = 'GROUP BY u.ID';
$query['ORDER'] = 'ORDER BY m.meta_key';
if($args['hide_untaxed'] == false){
$query['JOIN'][0] = 'LEFT '. $query['JOIN'][0];
}
if(!empty($args['terms'])){
$terms = implode(', ', $args['terms']);
$query['JOIN'][0] .= 'AND m.meta_value IN ($terms)';
}
$query['JOIN'] = implode(' ', $query['JOIN']);
return implode(' ', $query);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment