bbp_get_child_counts( int $parent_id )

Query the database for child counts, grouped by type & status


Description Description


Parameters Parameters

$parent_id

(Required)


Top ↑

Source Source

File: includes/common/functions.php

function bbp_get_child_counts( $parent_id = 0 ) {

	// Create cache key
	$parent_id    = absint( $parent_id );
	$key          = md5( serialize( array( 'parent_id' => $parent_id, 'post_type' => bbp_get_post_types() ) ) );
	$last_changed = wp_cache_get_last_changed( 'bbpress_posts' );
	$cache_key    = "bbp_child_counts:{$key}:{$last_changed}";

	// Check for cache and set if needed
	$retval = wp_cache_get( $cache_key, 'bbpress_posts' );
	if ( false === $retval ) {

		// Setup the DB & query
		$bbp_db = bbp_db();
		$sql    = "SELECT
						p.post_type AS type,
						p.post_status AS status,
						COUNT( * ) AS count
					FROM {$bbp_db->posts} AS p
						LEFT JOIN {$bbp_db->postmeta} AS pm
							ON p.ID = pm.post_id
							AND pm.meta_key = %s
					WHERE pm.meta_value = %d
					GROUP BY p.post_status, p.post_type";

		// Get prepare vars
		$post_type = get_post_type( $parent_id );
		$meta_key  = "_bbp_{$post_type}_id";

		// Prepare & get results
		$query     = $bbp_db->prepare( $sql, $meta_key, $parent_id );
		$results   = $bbp_db->get_results( $query, ARRAY_A );

		// Setup return value
		$retval    = wp_list_pluck( $results, 'type', 'type' );
		$statuses  = get_post_stati();

		// Loop through results
		foreach ( $results as $row ) {

			// Setup empties
			if ( ! is_array( $retval[ $row['type'] ] ) ) {
				$retval[ $row['type'] ] = array_fill_keys( $statuses, 0 );
			}

			// Set statuses
			$retval[ $row['type'] ][ $row['status'] ] = bbp_number_not_negative( $row['count'] );
		}

		// Always cache the results
		wp_cache_set( $cache_key, $retval, 'bbpress_posts' );
	}

	// Make sure results are INTs
	return (array) apply_filters( 'bbp_get_child_counts', $retval, $parent_id );
}

Top ↑

Changelog Changelog

Changelog
Version Description
2.6.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

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