count_user_posts()
Получает количество записей указанного типа для указанного пользователя (автора).
В WordPress нет функции count_author_posts(), но эта функция по смыслу полностью подходит.
Если нужно получить количество записей сразу нескольких пользователей, используйте count_many_users_posts().
Хуки из функции
Возвращает
Строку
. Всегда возвращает число в виде строки - количество записей пользователя.
Использование
count_user_posts( $userid, $post_type, $public_only );
- $userid(число) (обязательный)
- ID пользователя, количество записей которого нужно получить.
- $post_type(строка/массив)
- Тип поста, количество записей (элементов) которого нужно посчитать.
По умолчанию: 'post' - $public_only(логический)
Вернуть только публичные посты (
post_status = publish
).-
false
— добавить также приватные записи. В WHERE часть запроса будет добавлено условиеOR post_status = 'private'
. Т.е. для юзера с правами просмотра приватных записей они будут добавлены в запрос. true
— в запрос попадут только публичные посты, независимо от прав пользователя.
По умолчанию: false
-
Примеры
#1 Демо
$count = count_user_posts( 1 ); // string(2) "16"
#2 Получим количество постов пользователя
Выведем надпись, показывающую сколько постов опубликовано пользователем с ID 1:
<?php echo 'Всего постов: ' . count_user_posts(1); ?>
Получим: Всего постов: 321
#3 Количество записей (произвольного типа) автора
Допустим, у нас есть тип записи book
и нам нужно посчитать сколько записей этого типа опубликовал пользователь с ID = 5:
<?php echo 'Всего книг опубликовано пользователем 5: ' . count_user_posts( 5, 'book'); ?>
#4 Поддержка произвольных типов записей. Для WP меньше 4.1.
Этот пример не актуален для версий WP 4.1+, потому что появился второй параметр позволяющий это сделать.
Чтобы можно было подсчитывать количество записей произвольных типов, создадим свою функцию. Тут тип записи указывается во втором параметре, а в первом ID пользователя как и в count_user_posts()
.
function count_user_posts_by_type( $userid, $post_type = 'post' ){ global $wpdb; $where = get_posts_by_author_sql( $post_type, TRUE, $userid ); $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" ); return apply_filters( 'get_usernumposts', $count, $userid ); }
Заметки
- Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
С версии 3.0.0 | Введена. |
С версии 4.1.0 | Added $post_type argument. |
С версии 4.3.0 | Added $public_only argument. Added the ability to pass an array of post types to $post_type. |
Код count_user_posts() count user posts WP 6.7.1
function count_user_posts( $userid, $post_type = 'post', $public_only = false ) { global $wpdb; $where = get_posts_by_author_sql( $post_type, true, $userid, $public_only ); $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" ); /** * Filters the number of posts a user has written. * * @since 2.7.0 * @since 4.1.0 Added `$post_type` argument. * @since 4.3.1 Added `$public_only` argument. * * @param int $count The user's post count. * @param int $userid User ID. * @param string|array $post_type Single post type or array of post types to count the number of posts for. * @param bool $public_only Whether to limit counted posts to public posts. */ return apply_filters( 'get_usernumposts', $count, $userid, $post_type, $public_only ); }