如果您只需要5
.
如果要使用WP_User_Query()
要随机获取5个用户,可以尝试使用pre_user_query
钩住以覆盖orderby部分:
$args = array(
\'role\' => \'subscriber\',
\'number\' => 5,
);
add_action( \'pre_user_query\', \'my_pre_user_query\' );
$wp_user_query = new WP_User_Query( $args );
在哪里
function my_pre_user_query( $q ){
$q->query_orderby = \' ORDER BY RAND() \';
// remove the hook
remove_action( current_filter(), __FUNCTION__ );
}
更新:此
article 包含使用特殊
WHERE
条件,在
ORDER BY RAND()
开始。。。据我所知。
这个WHERE
你的情况可能是
WHERE RAND()<(SELECT ((5/COUNT(*))*10) FROM wp_users)
因此,如果您有大量用户,则可以尝试此修改后的操作回调:
function my_pre_user_query( $q ){
$q->query_where = str_replace( \'WHERE 1=1\', \'WHERE RAND()<(SELECT ((5/COUNT(*))*10) FROM wp_users) \', $q->query_where );
$q->query_orderby = \' ORDER BY RAND() \';
// remove hook
remove_action( current_filter() , __FUNCTION__ );
}
如果上述文章中的技巧奏效了!
以下是修改后回调的更通用版本:
function my_pre_user_query( $q ){
$limit = preg_replace( \'/[^\\d]/\', \'\', $q->query_limit );
$from = \'WHERE 1=1\';
$to = sprintf( \'WHERE RAND()<(SELECT ((%d/COUNT(*))*10) FROM %susers)\',
$limit,
$GLOBALS[\'wpdb\']->prefix
);
$q->query_where = str_replace( $from, $to, $q->query_where );
$q->query_orderby = \' ORDER BY RAND() \';
// remove the hook
remove_action( current_filter() , __FUNCTION__ );
}