Как подсчитать запрос пользователей get?


Я искал повсюду способ подсчета количества результатов запроса get_users.

Большая часть того, что я нашел, - это подсчет общего количества сообщений в запросе post, но ничего для подсчета общего числа пользователей в запросе get_users.

Может ли кто-нибудь указать мне на это? Большое спасибо.

Author: user1893, 2011-10-17

4 answers

Когда вы используете get_users() он извлекает массив пользователей, соответствующих критериям, указанным в $args, что означает, что вы можете просто использовать функцию PHP count(), например:

$users = get_users($args);
$number_of_users = count($users);
 3
Author: Bainternet, 2011-10-17 21:56:49

Ответ 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)
 2
Author: Radley Sustaire, 2020-06-07 02:24:37

Вот как я это реализовал:

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);, он гарантирует, что если все, что вам нужно, - это общее число, то он получит минимум, необходимый из БД для достижения этой цели.

 0
Author: Gruffy, 2015-04-01 11:15:06

Попробуйте использовать функцию ниже, чтобы получить количество всех пользователей и количество пользователей на основе ролей пользователей в массиве:

count_users();

Вывод выглядит следующим образом:

Array (
    [total_users] => 32
    [avail_roles] => Array (
        [administrator] => 1
        [subscriber] => 28
        [sub_administrator] => 1
        [editor] => 2
    )
)

Более подробную информацию можно найти здесь.

 0
Author: Raj, 2015-05-07 08:49:20