Order WordPress Users by Random

We can use the get_users() to get a list of authors, users with specific role, user with specific meta, etc. The function returns users which can be ordered by ID, login, nicename, email, url, registered, display_name, post_count, or meta_value. But there is no random option such as what get_posts() function provides to shows posts randomly.

Since the get_users() function uses WP_User_Query class, there is an action hook pre_user_query we can use to modify the class variable. The idea is using our own ‘rand’ order by parameter. If we put “rand” to the orderby parameter, “user_login” will be used instead. In this case, we need to replace it with RAND() to result users randomly. In this example below, we I ‘rand’ and you can use your own order by name.

add_action( 'pre_user_query', 'my_random_user_query' );

function my_random_user_query( $class ) {
    if( 'rand' == $class->query_vars['orderby'] )
        $class->query_orderby = str_replace( 'user_login', 'RAND()', $class->query_orderby );

    return $class;
}

The WP_User_Query contains order by query and the our arguments. Now, we have a new order by parameter to WordPress.

$users = get_users( array(
    'orderby' => 'rand',
    'number'  => 5
));
print_r( $users );

One comment on “Order WordPress Users by Random

Create Comment

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