WordPress как на ладони
wordpress jino

wp_count_posts() WP 2.5

Получает количество записей любого типа записей и любых статусов (опубликовано, черновик).

Аналогичная функция, только для комментариев: wp_count_comments()

✈ 1 раз = 0.000496с = быстро | 50000 раз = 0.23с = очень быстро PHP 7.0.8, WP 4.7
Хуки из функции:
Возвращает

Объект статусов постов. Каждый статут содержит количество записей в нем. Т.е. объект содержит количество опубликованных постов, черновиков и т.д.

stdClass Object
(
	[publish] => 60
	[future] => 0
	[draft] => 9
	[pending] => 3
	[private] => 0
	[trash] => 0
	[auto-draft] => 3
	[inherit] => 0
)

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

$count = wp_count_posts( $type, $perm );
$type(строка)
Название типа записи, количество записей которого нужно посчитать.
По умолчанию: 'post'
$perm(строка)
Чтобы текущему пользователю показывались личные записи ставим этот параметр в readable.
По умолчанию: ''

Примеры

#1. Базовое использование

Вернет объект данных о числе записей каждого статуса. Можно использовать функцию var_dump(), чтобы посмотреть что содержится в объекте.

$count_posts = wp_count_posts();

// в итоге получим что-то такое:
/*
stdClass Object
(
	[publish] => 60
	[future] => 0
	[draft] => 9
	[pending] => 3
	[private] => 0
	[trash] => 0
	[auto-draft] => 3
	[inherit] => 0
)
*/

#2. Количество опубликованных постов

Чтобы получить количество опубликованных постов используем такой код:

$count_posts = wp_count_posts();
$published_posts = $count_posts->publish;

Если не нужна поддержка PHP4, то можно использовать такую короткую запись верхнего кода:

$published_posts = wp_count_posts()->publish;

#3. Считаем черновики

Чтобы посчитать сколько у нас в базе данных черновиков используем такой код (для PHP5):

$draft_posts = wp_count_posts()->draft;

#4. Считаем другие типы записей

Чтобы посчитать сколько у нас опубликовано записей произвольного типа, допустим new_post_type, используем такой код:

$published_posts = wp_count_posts('new_post_type')->publish;

Код wp count posts: wp-includes/post.php VER 4.9.1

<?php
function wp_count_posts( $type = 'post', $perm = '' ) {
	global $wpdb;

	if ( ! post_type_exists( $type ) )
		return new stdClass;

	$cache_key = _count_posts_cache_key( $type, $perm );

	$counts = wp_cache_get( $cache_key, 'counts' );
	if ( false !== $counts ) {
		/** This filter is documented in wp-includes/post.php */
		return apply_filters( 'wp_count_posts', $counts, $type, $perm );
	}

	$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";
	if ( 'readable' == $perm && is_user_logged_in() ) {
		$post_type_object = get_post_type_object($type);
		if ( ! current_user_can( $post_type_object->cap->read_private_posts ) ) {
			$query .= $wpdb->prepare( " AND (post_status != 'private' OR ( post_author = %d AND post_status = 'private' ))",
				get_current_user_id()
			);
		}
	}
	$query .= ' GROUP BY post_status';

	$results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
	$counts = array_fill_keys( get_post_stati(), 0 );

	foreach ( $results as $row ) {
		$counts[ $row['post_status'] ] = $row['num_posts'];
	}

	$counts = (object) $counts;
	wp_cache_set( $cache_key, $counts, 'counts' );

	/**
	 * Modify returned post counts by status for the current post type.
	 *
	 * @since 3.7.0
	 *
	 * @param object $counts An object containing the current post_type's post
	 *                       counts by status.
	 * @param string $type   Post type.
	 * @param string $perm   The permission to determine if the posts are 'readable'
	 *                       by the current user.
	 */
	return apply_filters( 'wp_count_posts', $counts, $type, $perm );
}

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

Из метки: count (подсчет количество)

Еще из раздела: Запросы

wp_count_posts 6 комментариев
  • Otshelnik-fm185 cайт: otshelnik-fm.ru

    Функция аналогичная функции wp_count_comments - она считает только комментарии. Можно добавить в "Связанные функции"

    Я искал долго, как мне посчитать записи на утверждении. Везде только советы с прямой выборкой из БД попадались. Снова здесь нашел решение))

    1
    Ответить2.8 года назад #
  • Ян cайт: codyshop.ru

    В продолжение вопроса. Получаю количество записей произвольного типа:

    <?php $posts = get_posts('post_type=audio&status=new'); $count = count($posts); echo $count; ?>

    Однако вместе с числом выводит Array. В чем может быть причина?

    1
    Ответить1.4 года назад #
    • Kama4697

      В том, что Array выводит какой-то другой код...

      Что такое status=new - базово такого статуса нет.

      Также, по умолчанию get_posts() ограничивается 5-ю записями. Надо еще добавить параметр numberposts=-1

      Также, не стоит использовать переменную $posts - это глобальная переменная... Может конфликтовать...

      1
      Ответить1.4 года назад #
  • campusboy1951 cайт: www.youtube.com/c/wpplus

    Странновато, что эта функция находится в разделе "Вложения (media)".

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

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

Ваш комментарий
Предпросмотр