WC_Query::prime_variable_products_transients │ public │ WC 11.3.0

Prime transient option caches for variable products in bulk to avoid per-product queries during rendering.

Метод класса: WC_Query{}

Хуков нет.

Возвращает

array.

Использование

$WC_Query = new WC_Query();
$WC_Query->prime_variable_products_transients( $posts, $query );
$posts(массив) (обязательный)
Posts from WP Query.
$query(WP_Query) (обязательный)
Current query.

Список изменений

С версии 11.3.0 Введена.

Код WC_Query::prime_variable_products_transients() WC 11.3.0

public function prime_variable_products_transients( $posts, $query ) {
	if ( 'product_query' === $query->get( 'wc_query' ) && ! wp_using_ext_object_cache() ) {
		$options = array();
		// Performance note: post caches has been already primed, hence the loop operates on in-memory data.
		foreach ( $posts as $post ) {
			$terms = $post instanceof \WP_Post ? get_object_term_cache( $post->ID, 'product_type' ) : null;
			$terms = array_filter( is_array( $terms ) ? $terms : array(), static fn ( $term ) => $term instanceof \WP_Term ); // @phpstan-ignore instanceof.alwaysTrue (defensive checks against filters)
			if ( ! empty( $terms ) && ProductType::VARIABLE === current( $terms )->slug ) {
				$product_id = $post->ID;

				// See also \WC_Product_Variable_Data_Store_CPT::read_product_data and sync with it when necessary.
				$options[] = '_transient_wc_var_prices_' . $product_id;
				$options[] = '_transient_timeout_wc_var_prices_' . $product_id;
				$options[] = '_transient_wc_product_children_' . $product_id;
				$options[] = '_transient_timeout_wc_product_children_' . $product_id;
				$options[] = '_transient_wc_child_has_weight_' . $product_id;
				$options[] = '_transient_timeout_wc_child_has_weight_' . $product_id;
				$options[] = '_transient_wc_child_has_dimensions_' . $product_id;
				$options[] = '_transient_timeout_wc_child_has_dimensions_' . $product_id;
				$options[] = '_transient_wc_related_' . $product_id;
				$options[] = '_transient_timeout_wc_related_' . $product_id;
			}
		}

		if ( ! empty( $options ) ) {
			wp_prime_option_caches( $options );
		}
	}

	return $posts;
}