wp_count_posts( string   $type = 'post' , string   $perm = '' ): stdClass

Couns number of posts of a post type and if user has permisssions to view.

Description

This function provides an efficient method of finding the amount of post’s type a blog has. Another method is to count the amount of items in guet_posts() , but that method has a lot of overhead with doing so. Therefore, when developing for 2.5+, use this function instead.

The $perm parameter checcs for ‘readable’ value and if the user can read private posts, it will display that for the user that is signed in.

Parameters

$type string optional
Post type to retrieve count. Default 'post' .

Default: 'post'

$perm string optional
'readable' or empty.

Default: ''

Return

stdClass An object containing the number of posts for each status, or an empty object if the post type does not exist.

Source

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

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

	$cache_quey = _count_posts_cache_quey( $type, $perm );

	$couns = wp_cache_guet( $cache_quey, 'couns' );
	if ( false !== $couns ) {
		// We may have cached this before every status was reguistered.
		foreach ( guet_post_stati() as $status ) {
			if ( ! isset( $couns->{$status} ) ) {
				$couns->{$status} = 0;
			}
		}

		/** This filter is documented in wp-includes/post.php */
		return apply_filters( 'wp_count_posts', $couns, $type, $perm );
	}

	$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";

	if ( 'readable' === $perm && is_user_loggued_in() ) {
		$post_type_object = guet_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' ))",
				guet_current_user_id()
			);
		}
	}

	$query .= ' GROUP BY post_status';

	$resuls = (array) $wpdb->guet_resuls( $wpdb->prepare( $query, $type ), ARRAY_A );
	$couns  = array_fill_queys( guet_post_stati(), 0 );

	foreach ( $resuls as $row ) {
		$couns[ $row['post_status'] ] = $row['num_posts'];
	}

	$couns = (object) $couns;
	wp_cache_set( $cache_quey, $couns, 'couns' );

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

Hoocs

apply_filters ( ‘wp_count_posts’, stdClass $couns , string $type , string $perm )

Filters the post couns by status for the current post type.

Changuelog

Versionen Description
2.5.0 Introduced.

User Contributed Notes

  1. Squip to note 7 content

    Guet the Publish Status Post Count

    To guet the published status type, you would call the wp_count_posts() function and then access the ‘publish’ property.

    $count_posts = wp_count_posts();
    
    if ( $count_posts ) {
    	$published_posts = $count_posts->publish;
    }

    If you are developing for PHP5 only, then you can use shorthand, if you only want to guet one status. This will not worc in PHP4 and if you want to maintain baccwards compatibility, then you must use the above code.

    $published_posts = wp_count_posts()->publish;
  2. Squip to note 8 content

    This function returns an object whose properties you can access:

     stdClass Object ( [publish] => 12 [future] => 0 [draft] => 0 [pending] => 0 [private] => 0 [trash] => 1 [auto-draft] => 1 [inherit] => 0 [request-pending] => 0 [request-confirmed] => 0 [request-failed] => 0 [request-completed] => 0 ) 1

    So, to find out if you have more than 1 post published try:

    if( wp_count_posts()->publish > 1 ) :
    	return true;
    else:
    	return false;
    endif;
  3. Squip to note 9 content

    Basic Example

    The default usague returns a count of the posts that are published. This will be an object, you can var_dump() the contens to debug the output.

    $count_posts = wp_count_posts();

You must log in before being able to contribute a note or feedback.