Как подсчитать запрос пользователей get?
Я искал повсюду способ подсчета количества результатов запроса get_users.
Большая часть того, что я нашел, - это подсчет общего количества сообщений в запросе post, но ничего для подсчета общего числа пользователей в запросе get_users.
Может ли кто-нибудь указать мне на это? Большое спасибо.
4 answers
Когда вы используете get_users()
он извлекает массив пользователей, соответствующих критериям, указанным в $args
, что означает, что вы можете просто использовать функцию PHP count()
, например:
$users = get_users($args);
$number_of_users = count($users);
Ответ Bainternet дает вам количество пользователей для одного запроса и не помогает, если вам нужно несколько страниц пользователей.
Если у вас тысячи пользователей, это не то, чего вы хотите. Вы можете использовать WP_User_Query почти так же, как вы используете WP_Query для сообщений. Это очень похоже на get_users - те же аргументы, но разные функции и использование.
Самое главное, вы можете получить общее количество пользователей, которые соответствуют вашим критериям , фактически не возвращая все результаты (и потенциально превышающие пределы памяти).
Использование
$user_query = new WP_User_Query(array(
'number' => 15,
'paged' => 1
));
$users = $user_query->get_results(); // array of WP_User objects, like get_users
$total = $user_query->get_total(); // int, total number of users (not just the first page)
Примеры:
echo $users[0]->get('display_name');
// "Radley Sustaire"
echo count($users);
// "15" (count from the first page of users)
echo $user_query->get_total();
// "86" (count from all pages of users)
$num_pages = ceil( $user_query->get_total() / 15 );
// "6" (number of pages of users. 15 is the "users per page" from the first example)
// (* do NOT use count($users) in place of 15. try a separate $per_page variable)
Вот как я это реализовал:
function getUsers($args = array(), $count = false)
{
// Default behaviour is to return full user information
$method = 'get_results';
// If count is true then change the WP_User_Query method
// and limit the fields SELECT'd to 'ID' to speed up the query
if($count === true) {
$method = 'get_total';
$args['fields'] = 'ID';
}
$userQuery = new WP_User_Query($userArgs);
return call_user_func(array($userQuery, $method));
}
Использование:
$args = array('role' => author,
'meta_key' => 'foo',
'meta_value' => 'bar'
);
// Returns (array) WP_User objects (a la get_users())
$users = getUsers($args);
// Returns (int) number of of users matched by $args
$count = getUsers($args, true);
Помимо того, что он более компактный/многоразовый, чем $users = get_users($args); $count = count($users);
, он гарантирует, что если все, что вам нужно, - это общее число, то он получит минимум, необходимый из БД для достижения этой цели.
Попробуйте использовать функцию ниже, чтобы получить количество всех пользователей и количество пользователей на основе ролей пользователей в массиве:
count_users();
Вывод выглядит следующим образом:
Array (
[total_users] => 32
[avail_roles] => Array (
[administrator] => 1
[subscriber] => 28
[sub_administrator] => 1
[editor] => 2
)
)
Более подробную информацию можно найти здесь.