count_user_posts()
Отримує кількість записів вказаного типу для вказаного користувача (автора).
WordPress не має функції count_author_posts() , але ця функція за змістом повністю підходить.
Якщо потрібно отримати кількість записів відразу кількох користувачів, використовуйте count_many_users_posts() .
get_posts_by_author_sql()
(дуже повільно) | 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 argument $post_type . |
З версії 4.3.0 | Added $public_only argument. Added ability to pass array of post types to $post_type . |
Код count_user_posts() count user posts WP 6.0.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 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 User's post count. * @param int $userid User ID. * @param string|array $post_type Таблиця повідомлень 1 або array of post types до count number of posts for. * @param bool $public_only Whether до ліміту counted posts до public posts. */ return apply_filters( 'get_usernumposts', $count, $userid, $post_type, $public_only); }