# Функция WP_COUNT_POSTS() Функция
wp_count_posts()
используется в WordPress для получения количества записей (постов) любого типа и состояния (опубликованные, черновики и т.д.). Эта функция позволяет эффективно узнать, сколько постов определенного типа имеется в блоге. Альтернативный способ — использование функцииget_posts()
, но это менее эффективный метод. Поэтому, если вы разрабатываете для WordPress версии 2.5 и выше, лучше использовать именноwp_count_posts()
. ## Параметры функции - **$type (string)**: Название типа поста, количество которого вы хотите узнать. По умолчанию —'post'
. - **$perm (string)**: Для учета приватных постов текущего авторизованного пользователя, установите это значение наreadable
. По умолчанию —''
. ## Возвращаемое значение Функция возвращает объект классаstdClass
, содержащий количество постов для каждого статуса. Если тип поста не существует, вернется пустой объект. ## Применение функции ### Пример 1: Количество опубликованных постов Чтобы получить количество опубликованных постов, можно использовать следующий код:$count_posts = wp_count_posts(); $published_posts = $count_posts->publish;Если вам не нужна поддержка PHP4, можно сократить запись:
$published_posts = wp_count_posts()->publish;### Пример 2: Учет черновиков
Чтобы вычислить, сколько черновиков у вас в базе данных, воспользуйтесь таким кодом (для PHP5 и выше):
$draft_posts = wp_count_posts()->draft;### Пример 3: Учет других типов постов
Чтобы посчитать количество опубликованных постов для пользовательского типа поста, например,
new_post_type
, используйте следующий код:$published_posts = wp_count_posts('new_post_type')->publish;### Пример 4: Основное использование
Эта функция возвращает объект с количеством постов по каждому статусу. Вы можете использовать функцию
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 ) */## Примечания
- Функция использует глобальный объект базы данных WordPress:
$wpdb
.## Изменения
- **С версии 2.5.0**: Функция была представлена в данной версии WordPress.
## Код функции
Ниже приведен исходный код функции
wp_count_posts()
для понимания её ��аботы: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 ) { foreach ( get_post_stati() as $status ) { if ( ! isset( $counts->{$status} ) ) { $counts->{$status} = 0; } } 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' ); return apply_filters( 'wp_count_posts', $counts, $type, $perm ); }Этот текст на русском языке является более простым в восприятии и может помочь пользователю начать работу с функцией
wp_count_posts()
в WordPress.