WordPress get user by meta data

Solution 1:

Since WP v3.1 it's ridiculously easy to search for a user by his/her meta key.

Use the function

get_users($args)

(WP Documentation)

The function takes an array of parameters, in your case you need

get_users(array(
    'meta_key' => 'parent_id',
    'meta_value' => '42'
))

Solution 2:

Simple way how to get one user by his metadata is:

$user = reset(
 get_users(
  array(
   'meta_key' => $meta_key,
   'meta_value' => $meta_value,
   'number' => 1
  )
 )
);

Solution 3:

Here is how you can get users based on a custom role and multiple metadata keys,

$available_drivers = get_users(
            array(
                'role' => 'driver',
                'meta_query' => array(
                    array(
                        'key' => 'approved',
                        'value' => true,
                        'compare' => '=='
                    ),
                    array(
                        'key' => 'available',
                        'value' => true,
                        'compare' => '=='
                    )
                )
            )
        );

Explaining the above query, I want only those users who I assigned the role of driver, and they are approved and available. The approved and available are custom fields created using ACF as True/False fields.

If you have additional metadata to test, add another array element to the meta_query array.

Meanwhile checkout my open source at github.com/patrickingle