bbp_get_statistics( array $args = array() )

Get the forum statistics


Description Description


Parameters Parameters

$args

(Optional) The function supports these arguments (all default to true): - count_users: Count users? - count_forums: Count forums? - count_topics: Count topics? If set to false, private, spammed and trashed topics are also not counted. - count_pending_topics: Count pending topics? (only counted if the current user has edit_others_topics cap) - count_private_topics: Count private topics? (only counted if the current user has read_private_topics cap) - count_spammed_topics: Count spammed topics? (only counted if the current user has edit_others_topics cap) - count_trashed_topics: Count trashed topics? (only counted if the current user has view_trash cap) - count_replies: Count replies? If set to false, private, spammed and trashed replies are also not counted. - count_pending_replies: Count pending replies? (only counted if the current user has edit_others_replies cap) - count_private_replies: Count private replies? (only counted if the current user has read_private_replies cap) - count_spammed_replies: Count spammed replies? (only counted if the current user has edit_others_replies cap) - count_trashed_replies: Count trashed replies? (only counted if the current user has view_trash cap) - count_tags: Count tags? If set to false, empty tags are also not counted - count_empty_tags: Count empty tags?

Default value: array()


Top ↑

Return Return

(object) Walked forum tree


Top ↑

Source Source

File: includes/common/functions.php

function bbp_get_statistics( $args = array() ) {

	// Parse arguments against default values
	$r = bbp_parse_args( $args, array(

		// Users
		'count_users'           => true,

		// Forums
		'count_forums'          => true,

		// Topics
		'count_topics'          => true,
		'count_pending_topics'  => true,
		'count_private_topics'  => true,
		'count_spammed_topics'  => true,
		'count_trashed_topics'  => true,

		// Replies
		'count_replies'         => true,
		'count_pending_replies' => true,
		'count_private_replies' => true,
		'count_spammed_replies' => true,
		'count_trashed_replies' => true,

		// Topic tags
		'count_tags'            => true,
		'count_empty_tags'      => true

	), 'get_statistics' );

	// Defaults
	$topic_count     = $topic_count_hidden    = 0;
	$reply_count     = $reply_count_hidden    = 0;
	$topic_tag_count = $empty_topic_tag_count = 0;
	$hidden_topic_title = $hidden_reply_title = '';

	// Users
	$user_count = ! empty( $r['count_users'] )
		? bbp_get_total_users()
		: 0;

	// Forums
	$forum_count = ! empty( $r['count_forums'] )
		? wp_count_posts( bbp_get_forum_post_type() )->publish
		: 0;

	// Post statuses
	$pending = bbp_get_pending_status_id();
	$private = bbp_get_private_status_id();
	$spam    = bbp_get_spam_status_id();
	$trash   = bbp_get_trash_status_id();
	$closed  = bbp_get_closed_status_id();

	// Topics
	if ( ! empty( $r['count_topics'] ) ) {
		$all_topics  = wp_count_posts( bbp_get_topic_post_type() );

		// Published (publish + closed)
		$topic_count = $all_topics->publish + $all_topics->{$closed};

		if ( current_user_can( 'read_private_topics' ) || current_user_can( 'edit_others_topics' ) || current_user_can( 'view_trash' ) ) {

			// Declare empty arrays
			$topics = $topic_titles = array();

			// Pending
			$topics['pending'] = ( ! empty( $r['count_pending_topics'] ) && current_user_can( 'edit_others_topics' ) )
				? (int) $all_topics->{$pending}
				: 0;

			// Private
			$topics['private'] = ( ! empty( $r['count_private_topics'] ) && current_user_can( 'read_private_topics' ) )
				? (int) $all_topics->{$private}
				: 0;

			// Spam
			$topics['spammed'] = ( ! empty( $r['count_spammed_topics'] ) && current_user_can( 'edit_others_topics'  ) )
				? (int) $all_topics->{$spam}
				: 0;

			// Trash
			$topics['trashed'] = ( ! empty( $r['count_trashed_topics'] ) && current_user_can( 'view_trash' ) )
				? (int) $all_topics->{$trash}
				: 0;

			// Total hidden (pending + private + spam + trash)
			$topic_count_hidden = $topics['pending'] + $topics['private'] + $topics['spammed'] + $topics['trashed'];

			// Generate the hidden topic count's title attribute
			$topic_titles[] = ! empty( $topics['pending'] )
				? sprintf( esc_html__( 'Pending: %s', 'bbpress' ), bbp_number_format_i18n( $topics['pending'] ) )
				: '';

			$topic_titles[] = ! empty( $topics['private'] )
				? ''//sprintf( esc_html__( 'Private: %s', 'bbpress' ), bbp_number_format_i18n( $topics['private'] ) )
				: '';

			$topic_titles[] = ! empty( $topics['spammed'] )
				? sprintf( esc_html__( 'Spammed: %s', 'bbpress' ), bbp_number_format_i18n( $topics['spammed'] ) )
				: '';

			$topic_titles[] = ! empty( $topics['trashed'] )
				? sprintf( esc_html__( 'Trashed: %s', 'bbpress' ), bbp_number_format_i18n( $topics['trashed'] ) )
				: '';

			// Compile the hidden topic title
			$hidden_topic_title = implode( ' | ', array_filter( $topic_titles ) );
		}
	}

	// Replies
	if ( ! empty( $r['count_replies'] ) ) {

		$all_replies = wp_count_posts( bbp_get_reply_post_type() );

		// Published
		$reply_count = $all_replies->publish;

		if ( current_user_can( 'read_private_replies' ) || current_user_can( 'edit_others_replies' ) || current_user_can( 'view_trash' ) ) {

			// Declare empty arrays
			$replies = $reply_titles = array();

			// Pending
			$replies['pending'] = ( ! empty( $r['count_pending_replies'] ) && current_user_can( 'edit_others_replies' ) )
				? (int) $all_replies->{$pending}
				: 0;

			// Private
			$replies['private'] = ( ! empty( $r['count_private_replies'] ) && current_user_can( 'read_private_replies' ) )
				? (int) $all_replies->{$private}
				: 0;

			// Spam
			$replies['spammed'] = ( ! empty( $r['count_spammed_replies'] ) && current_user_can( 'edit_others_replies'  ) )
				? (int) $all_replies->{$spam}
				: 0;

			// Trash
			$replies['trashed'] = ( ! empty( $r['count_trashed_replies'] ) && current_user_can( 'view_trash' ) )
				? (int) $all_replies->{$trash}
				: 0;

			// Total hidden (pending + private + spam + trash)
			$reply_count_hidden = $replies['pending'] + $replies['private'] + $replies['spammed'] + $replies['trashed'];

			// Generate the hidden topic count's title attribute
			$reply_titles[] = ! empty( $replies['pending'] )
				? sprintf( esc_html__( 'Pending: %s', 'bbpress' ), bbp_number_format_i18n( $replies['pending'] ) )
				: '';

			$reply_titles[] = ! empty( $replies['private'] )
				? sprintf( esc_html__( 'Private: %s', 'bbpress' ), bbp_number_format_i18n( $replies['private'] ) )
				: '';

			$reply_titles[] = ! empty( $replies['spammed'] )
				? sprintf( esc_html__( 'Spammed: %s', 'bbpress' ), bbp_number_format_i18n( $replies['spammed'] ) )
				: '';

			$reply_titles[] = ! empty( $replies['trashed'] )
				? sprintf( esc_html__( 'Trashed: %s', 'bbpress' ), bbp_number_format_i18n( $replies['trashed'] ) )
				: '';

			// Compile the hidden replies title
			$hidden_reply_title = implode( ' | ', array_filter( $reply_titles ) );
		}
	}

	// Topic Tags
	if ( ! empty( $r['count_tags'] ) && bbp_allow_topic_tags() ) {

		// Get the count
		$topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id(), array( 'hide_empty' => true ) );

		// Empty tags
		if ( ! empty( $r['count_empty_tags'] ) && current_user_can( 'edit_topic_tags' ) ) {
			$empty_topic_tag_count = wp_count_terms( bbp_get_topic_tag_tax_id() ) - $topic_tag_count;
		}
	}

	// Tally the tallies
	$counts = array_filter( array_map( 'absint', compact(
		'user_count',
		'forum_count',
		'topic_count',
		'topic_count_hidden',
		'reply_count',
		'reply_count_hidden',
		'topic_tag_count',
		'empty_topic_tag_count'
	) ) );

	// Define return value
	$statistics = array();

	// Loop through and store the integer and i18n formatted counts.
	foreach ( $counts as $key => $count ) {
		$statistics[ $key ]         = bbp_number_format_i18n( $count );
		$statistics[ "{$key}_int" ] = $count;
	}

	// Add the hidden (topic/reply) count title attribute strings because we
	// don't need to run the math functions on these (see above)
	$statistics['hidden_topic_title'] = $hidden_topic_title;
	$statistics['hidden_reply_title'] = $hidden_reply_title;

	// Filter & return
	return (array) apply_filters( 'bbp_get_statistics', $statistics, $r, $args );
}

Top ↑

Changelog Changelog

Changelog
Version Description
2.6.0 bbPress (r6055) Introduced the count_pending_topics and count_pending_replies arguments.
2.0.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

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