WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

count_user_posts() WP 3.0

Получает количество записей указанного типа для указанного пользователя (автора).

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

В WordPress нет функции count_author_posts(), но эта функция по смыслу полностью подходит.

Если нужно получить количество записей сразу нескольких пользователей, используйте count_many_users_posts().

Работает на основе: get_posts_by_author_sql()
1 раз — 0.001945 сек (очень медленно) | 50000 раз — 46.58 сек (очень медленно) | PHP 7.1.2, WP 4.7.3
Хуки из функции

Возвращает

Строку. Всегда возвращает число в виде строки - количество записей пользователя.

Использование

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() WP 5.8.2

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 );
}

Остальное

5 комментов
    Войти