Automattic\WooCommerce\Blocks\Utils

BlocksWpQuery::get_cached_posts()publicWC 1.0

Get cached posts, if a cache exists.

A hash is generated using the array of query_vars. If doing custom queries via filters such as posts_where (where the SQL query is manipulated directly) you can still ensure there is a unique hash by injecting custom query vars via the parse_query filter. For example:

add_filter( 'parse_query', function( $wp_query ) {
	 $wp_query->query_vars['my_custom_query_var'] = true;
} );

Doing so won't have any negative effect on the query itself, and it will cause the hash to change.

Method of the class: BlocksWpQuery{}

No Hooks.

Return

WP_Post[]|Int[]. Array of post objects or post IDs.

Usage

$BlocksWpQuery = new BlocksWpQuery();
$BlocksWpQuery->get_cached_posts( $transient_version );
$transient_version(string)
Transient version to allow for invalidation.
Default: ''

BlocksWpQuery::get_cached_posts() code WC 9.4.2

public function get_cached_posts( $transient_version = '' ) {
	$hash            = md5( wp_json_encode( $this->query_vars ) );
	$transient_name  = 'wc_blocks_query_' . $hash;
	$transient_value = get_transient( $transient_name );

	if ( isset( $transient_value, $transient_value['version'], $transient_value['value'] ) && $transient_value['version'] === $transient_version ) {
		return $transient_value['value'];
	}

	$results = $this->get_posts();

	set_transient(
		$transient_name,
		array(
			'version' => $transient_version,
			'value'   => $results,
		),
		DAY_IN_SECONDS * 30
	);

	return $results;
}