The pre_user_query WordPress PHP action fires after the WP_User_Query has been parsed and before the query is executed.
Usage
add_action('pre_user_query', 'my_custom_pre_user_query');
function my_custom_pre_user_query($query) {
// Your custom code here
return $query;
}
Parameters
$query(WP_User_Query): The current instance of WP_User_Query, passed by reference.
More information
See WordPress Developer Resources: pre_user_query
Examples
Modify the User Query to Order by Display Name
This example shows how to modify the user query to order the results by display name.
add_action('pre_user_query', 'order_users_by_display_name');
function order_users_by_display_name($query) {
$query->query_orderby = 'ORDER BY display_name ASC';
}
Exclude a Specific User Role from the Query
This example demonstrates how to exclude users with a specific role from the query.
add_action('pre_user_query', 'exclude_user_role_from_query');
function exclude_user_role_from_query($query) {
global $wpdb;
$query->query_where .= " AND {$wpdb->users}.ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '{$wpdb->prefix}capabilities' AND meta_value LIKE '%\"editor\"%')";
}
Limit the Number of Users Returned
This example limits the number of users returned by the query to 5.
add_action('pre_user_query', 'limit_users_returned');
function limit_users_returned($query) {
$query->query_limit = 'LIMIT 5';
}
Search Users by Custom Meta Field
This example demonstrates how to search users based on a custom meta field value.
add_action('pre_user_query', 'search_users_by_custom_meta_field');
function search_users_by_custom_meta_field($query) {
global $wpdb;
$search = 'John Doe';
$query->query_from .= " LEFT JOIN {$wpdb->usermeta} ON ( {$wpdb->users}.ID = {$wpdb->usermeta}.user_id )";
$query->query_where .= " AND {$wpdb->usermeta}.meta_key = 'custom_field' AND {$wpdb->usermeta}.meta_value LIKE '%" . $search . "%'";
}
Filter Users by Registration Date
This example filters users by their registration date, only showing users registered within the last 30 days.
add_action('pre_user_query', 'filter_users_by_registration_date');
function filter_users_by_registration_date($query) {
global $wpdb;
$query->query_where .= " AND {$wpdb->users}.user_registered >= DATE_SUB(NOW(), INTERVAL 30 DAY)";
}