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