WordPress как на ладони
Готовые темы (шаблоны) для WordPress wordpress jino

count_user_posts() WP 3.0

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

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

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

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

$count = count_user_posts( $userid, $post_type, $public_only );
$userid(число) (обязательный)
ID пользователя, количество записей которого нужно получить.
По умолчанию: нет
$post_type(строка)
Тип поста, количество записей (элементов) которого нужно посчитать. C версии 4.1.
По умолчанию: 'post'
$public_only(логический)
Получать только количество опубликованных постов. C версии 4.3.
По умолчанию: false

Примеры

#1 Получим количество постов пользователя

Выведем надпись, показывающую сколько постов опубликовано пользователям с ID 1:

<?php echo 'Всего постов: ' . count_user_posts(1); ?>

Получим: Всего постов: 321

#2 Количество записей произвольного типа автора

Допустим, у нас есть тип записи book и нам нужно посчитать сколько записей этого типа опубликовал пользователь с ID = 5:

<?php echo 'Всего книг опубликовано пользователем 5: ' . count_user_posts( 5, 'book'); ?>

#3 Поддержка произвольных типов записей. Для 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);
}

Заметки

  • С версии 4.1. в функцию можно передать второй параметр $post_type, чтобы посчитать количество записей пользователя и ограничиться типом записи.

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

Код count user posts: wp-includes/user.php WP 4.7.5

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

Cвязанные функции

Из раздела: Остальное

count_user_posts 6 комментариев
  • Алёна

    Добрый день! Подскажите пожалуйста функцию или, если можно, то пример. Как вывести количество записей пользователя из конкретной рубрики. Спасибо)))

    Ответить1.8 года назад #
    • Kama4329

      Для подсчета записей пользователя есть функция http://wp-kama.ru/function/count_user_posts , но она считает в общем.

      Чтобы из рубрики, вам нужно получить все записи и потом их посчитать http://wp-kama.ru/function/wp_query#parametry-taksonomiy

      $args = array(
      	'tax_query' => array(
      		array(
      			'taxonomy' => 'category', // название таксономии
      			'field' => 'id',
      			'terms' => array( 62 ) // id рубрики
      		)
      	),
      	'post_type' => 'post', // название типа поста
      	'author'    => 5, // ID автора
      	'posts_per_page' => -1
      );
      $posts = get_posts( $args );
      $count = count( $posts );
      echo $count;
      Ответить1.8 года назад #
      • Алёна

        Спасибо большое, все получилось и отлично работает!

        Ответить1.8 года назад #
  • Виктор

    Здравствуйте, подскажите пожалуйста есть ли функция вывода не общего количества добавленных произвольных постов а вывода постов в таком вот виде.
    Мои посты:
    Пост 1
    Пост 2
    Пост 3
    пост 4

    Ответить1.7 года назад #
    1
    • Виктор

      Сам спросил сам отвечу хоть и чуть с опозданием. я вывожу в сайдбаре.

      <?php $loop = new WP_Query( 'author=' . $user_ID . '&post_type=proekt&paged=' . $paged );
      if ( $loop->have_posts() ) :  while ( $loop->have_posts() ) : $loop->the_post(); ?>
      <div style="border-bottom: 0px dashed rgb(0, 86, 134);" class ="proekt_title">
      <a style="font-size: 14px;" href="<?php the_permalink() ?>"><?php the_title(); ?></a>
      </div>
      Ответить1.6 года назад #
  • Максим12 cайт: literator.info
    @

    Добрый день!
    Очень нужна помощь.
    У меня не срабатывает параметр $public_only=true. (WP 4.5)
    В итоге функция всегда выводит суммарное количество постов автора, в том числе и черновики, а мне нужно выводить только количество опубликованных.
    Вот пример как я пишу

    Ответитьгод назад #

Здравствуйте, !

Ваш комментарий