wp_count_posts() WP 2.5.0

Отримує кількість записів будь-якого типу записів та будь-яких статусів (опубліковано, чернетка).

Забезпечує ефективний спосіб отримання кількості записів вказаного типу (результат кешується). Те саме можна зробити за допомогою запиту get_posts() , але цей підхід набагато менш ефективний. Тому при розробці 2.5+ використовуйте цю функцію.

Параметр $perm дозволяє додати в підрахунок особисті записи (private), якщо користувач авторизований і читати приватні пости. Для цього параметр $perm повинен дорівнювати readable.

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

1 раз – 0.00051 сек
(повільно) | 50000 разів – 0.11 сек
(дуже швидко) |
PHP 7.3.12, WP 5.4

Хуки з функції

Повертає

stdClass. Об’єкт статусів постів. Кожен статут містить кількість записів у ньому. Тобто. об’єкт містить кількість опублікованих постів, чернеток тощо.

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
(рядок)
Щоб поточному авторизованому користувачеві показувалися його особисті (private) записи, ставимо цей параметр в
readable.


За замовчуванням: ”

Приклади

0

#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
)
*/
0

#2 Кількість опублікованих постів

Щоб отримати кількість опублікованих постів використовуємо такий код:

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

Якщо не потрібна підтримка PHP4, можна використовувати такий короткий запис верхнього коду:

$published_posts = wp_count_posts()->publish;
0

#3 Вважаємо чернетки

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

$draft_posts = wp_count_posts()->draft;
0

#4 Вважаємо інші типи записів

Щоб порахувати скільки у нас опубліковано записів довільного типу, припустимо new_post_type, використовуємо такий код:

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

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 2.5.0Введено.

Код wp_count_posts() WP 6.0.2

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 ) {
		// We may have cached this before every status був registered.
		foreach ( get_post_stati() as $status ) {
			if ( ! isset( $counts->{$status} ) ) {
				$counts->{$status} = 0;
			}
		}

		/** Цей filter is documented в 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 статуя для поточного post type.
	 *
	 * @ Since 3.7.0
	 *
	 * @param stdClass $counts Примітка.
	 * counts by status.
	 * @param string $type Post type.
	 * @param string $perm Зміна для визначення, якщо повідомлення 'readable'
	 * by the current user.
	 */
	return apply_filters( 'wp_count_posts', $counts, $type, $perm);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *