I’m trying to get all users assigned to a custom usermeta. I know that get_users() is supposed to work; however, it doesn’t seem to be working. What I have is a usermeta storing a category ID and I’m trying to use 'meta_value' => $cat_id to query the database. So this is the code I have:

$args = array(
    'meta_key' => 'custom-usermeta',
    'meta_value' => $cat_id
);
$users = get_users( $args );

and here is how I’m saving it:

update_user_meta( $user_id,'custom-usermeta',$cat_id);

$cat_id is an array.

But this isn’t working. What I’ve figured out so far is that the meta_value expects an unserialized value. How can I get that to work? I tried the 'meta_compare' => 'LIKE' but then that just about grabs everything (because of the way WordPress serializes the values). Is there anything else I can do to fix this?

2 s
2

In your original code, you’re not passing an operator to meta_compare. Note that get_users() does not define a default operator. Try using '=':

$args = array(
    'meta_key' => 'custom-usermeta',
    'meta_value' => $cat_id,
    'meta_compare' => '='
);
$users = get_users( $args );

As a diagnostic, you might make sure that the problem isn’t the saving/querying by your custom user metadata. Replace the meta_key and meta_value with one of the default WP user meta keys, just to see if anything is returned. (Easiest might be the user role?)

And this one is a long-shot, but: even though the get_users() Codex documentation says otherwise, from what I can gather from source, the meta_query for WP_user_query should be the same as the meta_query for WP_query – in which case, have you tried putting your meta query in an array? e.g.:

$args = array(
    array( 
        'meta_key' => 'custom-usermeta',
        'meta_value' => $cat_id
    )
);
$users = get_users( $args );

Cf. WP_Query usage of meta_query.

Leave a Reply

Your email address will not be published. Required fields are marked *