Вывод пользователей и количества постов в WordPress

Я решил время от времени создавать обзоры под названием «Полезности для WordPress» и перед вами один из таких обзоров. В не вы найдете развернутый ответ на вопрос: «Как вывести всех зарегистрированных пользователей блога WordPress и количество постов, которые они написали?»

И так, приступим:

Как вывести всех зарегистрированных пользователей блога и количество постов, которые они написали?

Проще всего в данном случае получить выборку запросом к базе данных.

$q = $wpdb->get_results("SELECT `display_name`,COUNT(*) as `count` FROM $wpdb->posts,$wpdb->users where $wpdb->users.`ID`=$wpdb->posts.`post_author` and `post_parent`=’0’ group by post_author");
if( !empty($q) ){

echo ’<ul>’;

foreach( $q as $rec ){
echo "<li>$rec->display_name ($rec->count записей)</li>";
}

echo ’</ul>’;
}

Результат будет примерно таким:
admin (60 записей)
nikonov (40 записей)
random_nick (8 записей)

Как узнать количество постов какого-то конкретного автора в wordpress?

Если известен ID участника блога, то нужно вызвать стандартную функцию get_usernumposts

echo get_usernumposts($id)

В качестве варианта можно вызвать простенький запрос (но лучше первый вариант, т. к. возможны изменения в названиях таблиц и полей в будущем)

$row = $wpdb->get_row("select count(*) as `count` from $wpdb->posts where `post_author`=’$id’ and `post_parent`=’0’ and `post_status`=’publish’ and `post_type`=’post’");
if( !empty($row) ){
echo "У пользователя (ID=$id) $row->count записей";
}

А если не по ID а по логину?

Почти тот же случай, но сперва нужно узнать ID пользователя

$login = "admin";

$user_data = get_userdatabylogin($login);
if( !empty($user_data) ){
$count = get_usernumposts($user_data->ID);
echo "У пользователя (Логин=$login) $count записей";
}

А если нужно вывести количество постов автора, зная его мыло, то замените get_userdatabylogin на get_user_by_email